W jaki sposób „człowiek” przywraca ekran po wyjściu z programu?

18

Jeśli otworzę stronę podręcznika programowego takiego jak catlub ls, drukuje (może nie być odpowiednim słowem) zawartość strony podręcznika i po naciśnięciu qwyświetla ekran jak przed wywołaniem manpolecenia. Jak przebiega przywracanie? Co usuwa wszystko, a następnie drukuje poprzednią zawartość powłoki?

Przykład:

[VAR121@Tesla Testing]$  man ls

Wynik:

LS(1)                                                        User Commands                                                        LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

 ............

Kiedy nacisnę q, ekran powróci do domyślnego wyglądu muszli, takiego jak pokazany poniżej monit.

[VAR121@Tesla Testing]$  man ls
[VAR121@Tesla Testing]$

Jak przywracany jest ekran?

VAR121
źródło

Odpowiedzi:

19

„Clearing” i „przywrócenia” ekran jest rzeczywiście funkcją emulatora terminala używasz ( xterm, gnome-terminal, konsole, screen).

Domyślnie manużywany jest pager less.

Od man 1 man

   -P  pager
          Specify  which pager to use.  This option overrides the 
          MANPAGER environment variable, which in turn overrides 
          the PAGER variable.  By default, man  uses /usr/bin/less -is.

Po lesswywołaniu, emulator terminala uruchamia altscreen w celu wyświetlenia zawartości strony man. Po lesswyjściu altscreen jest niszczony, a terminal wyświetla to, co zostało zapisane w buforze.

Jest tutaj odpowiedź , która omawia to dalej i jak powstrzymać programy takie jak lessuruchamianie altscreen, a tym samym czyszczenie ekranu po wyjściu. Krótko mówiąc, możesz zdefiniować zmienną środowiskową, aby lessnie wywoływała ekranu altscreen podczas wywołania. Jeśli używasz bash, umieść to w ~ / .bashrc:

export MANPAGER="/usr/bin/less -r -X -is"

George M.
źródło
1
Ta sama historia z vi?
VAR121
3
vim honoruje altscreen w emulatorze terminali. Możesz dodać coś takiego do ~ / .vimrc - "set t_ti = t_te =", aby zmienić możliwości terminala, których używa vim.
George M