Wygląda na to, że funkcja nazywa się „ekranem alternatywnym” lub przełączaniem między ekranem normalnym a alternatywnym.
Możesz to zbadać za pomocą Xtermu. Na przykład typu man man
w xterm
oraz zamknąć człowieka. Teraz możesz przejść do alternatywnego ekranu za pomocą Ctrlmyszy + Mouse2 (środkowe kliknięcie) -> „Pokaż alternatywny ekran”. Alternatywnie możesz bezpośrednio wprowadzić sekwencje kontrolne xterm , np .:
$ echo -e '\033[?47h' # alternate screen
$ echo -e '\033[?47l' # normal screen
Ostatnie dwa polecenia działają również w gnome-terminal (prawdopodobnie także w innych).
To, co dzieje się, gdy uruchamianie man
/ vi
/ less
itp. Polega na tym, że wysyłają abstrakcyjne polecenie czyszczenia ekranu. Przy wyjściu (lub zawieszeniu) wysyłają abstrakcyjne polecenie przywracania ekranu. Sposób, w jaki polecenie tłumaczy się na konkretne sekwencje sterowania terminalem, zdefiniowano w bazie danych terminfo .
Wyłącz alternatywne przełączanie ekranu
To, co powinno działać dla wszystkich terminali, to dostosowywanie lokalnych wpisów terminfo, tj. Usuwanie mapowania abstrakcyjnych komend ekranu wyczyść / przywróć.
Możesz to zrobić w ten sposób - dla bieżącego $TERM
wpisu (na przykład gnome-terminal na Fedorze 19):
$ echo $TERM
xterm-256color
$ infocmp -1 > xterm-256color
$ sed 's/^\(xterm-256color\)|/\1-na|/ ; /smcup\|rmcup/d ' \
xterm-256color > xterm-256color-na
$ diff -u xterm-256color*
--- xterm-256color 2013-08-04 16:33:52.041393461 +0200
+++ xterm-256color-na 2013-08-04 16:36:56.829930520 +0200
@@ -1,5 +1,5 @@
# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-256color
-xterm-256color|xterm with 256 colors,
+xterm-256color-na|xterm with 256 colors,
am,
bce,
ccc,
@@ -155,7 +155,6 @@
rin=\E[%p1%dT,
rmacs=\E(B,
rmam=\E[?7l,
- rmcup=\E[?1049l,
rmir=\E[4l,
rmkx=\E[?1l\E>,
rmm=\E[?1034l,
@@ -170,7 +169,6 @@
sgr0=\E(B\E[m,
smacs=\E(0,
smam=\E[?7h,
- smcup=\E[?1049h,
smir=\E[4h,
smkx=\E[?1h\E=,
smm=\E[?1034h,
$ tic xterm-256color-na # loads the file to $HOME/.terminfo
$ find ~/.terminfo -type f
$ HOME/.terminfo/x/xterm-256color-na
Teraz możesz to przetestować za pomocą:
$ TERM=xterm-256color-na man man # and then hit q
Możesz powtórzyć powyższe kroki dla innych terminali, jeśli używasz wielu. Jeśli wszystko działa zgodnie z oczekiwaniami, możesz ustawić TERM
za pomocą pliku rc powłoki.
Możesz także bezpośrednio określić nazwę terminala jako parametr infocmp
, np .:
$ infocmp -1 screen > screen
Włącz alternatywne przełączanie ekranu
Niektóre terminale obsługują funkcję alternatywnego przełączania ekranu (np. Ekran ), ale domyślnie ją wyłączają .
Dla screen
możesz go włączyć za pośrednictwem ~/.screenrc
:
$ cat ~/.screenrc
altscreen
Jeśli zdalnie logujesz się przez ssh do - powiedzmy - systemu Solaris, być może zdalnie skonfigurowana ogólnosystemowa baza danych terminfo jest w pewnym sensie historyczna, zepsuta lub zawiera pewne nietypowe / specyficzne dla Solaris wartości domyślne, które nie pasują do terminali „najnowocześniejszych” uruchamiasz ssh.
Dlatego istnieje możliwość skopiowania lokalnej bazy danych terminfo z katalogu / usr / share / info (na kliencie) do host:~/.terminfo
(na serwerze).
W przypadku, gdy skompilowany format terminfo nie jest kompatybilny, możesz również eksportować / importować wpisy, jak w poprzednim akapicie.
Próbowałem z terminfo-db z instalacji Cygwin i kopiowanie go bezpośrednio do systemu Solaris 10 działało.
Jeśli chcesz udostępnić alternatywną bazę danych terminfo między użytkownikami, podaj jej ścieżkę za pomocą TERMINFO
zmiennej środowiskowej.
Zignoruj sekwencję kontrolną
Niektóre terminale obsługują wyłączenie sekwencji sterowania dla alternatywnego przełączania ekranu. Na przykład xterm ma opcję, gnome-terminal nie.
W przypadku Xterm jest to X-ressource , np
XTerm*titeInhibit: true
Konfiguracje specyficzne dla programu
Niektóre programy mają pliki konfiguracyjne do konfiguracji wysyłanych poleceń sekwencji sterującej / terminfo. Na przykład
$ LESS=X less foo
konfiguruje, less
aby nie wyczyścić / przywrócić ekranu.
Bo vim
możesz dołączyć coś takiego
set t_ti= t_te=
w tobie ~/.vimrc
.
Nie znalazłem opcji, jak skonfigurować to zachowanie dla góry - domyślnie nie wysyła ekranu przywracania.