Эта функция называется альтернативным экраном или переключением между обычным и альтернативным экраном.
Вы можете исследовать это, используя xterm. Например , тип man man
В одном xterm
и выхода человека. Теперь вы можете переключиться на альтернативный экран с помощью Ctrl+ Mouse2 (средний щелчок) -> «Показать альтернативный экран». В качестве альтернативы вы можете напрямую ввести управляющие последовательности xterm , например:
$ echo -e '\033[?47h' # alternate screen
$ echo -e '\033[?47l' # normal screen
Последние две команды также работают в gnome-терминал (возможно, в других тоже).
То, что происходит, когда man
/ vi
/ less
и т.д. запускаются, в основном, они посылают абстрактную команду очистки экрана. При выходе (или приостановке) они отправляют абстрактную команду восстановления экрана. Как команда переводит в конкретные последовательности управления терминалом, определено в базе данных terminfo .
Отключить альтернативное переключение экрана
Что должно работать для всех терминалов, так это настроить локальные записи terminfo, то есть удалить отображение абстрактных экранных команд очистки / восстановления.
Вы можете сделать это так - для текущей $TERM
записи (например, для gnome-терминала в Fedora 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
Теперь вы можете проверить это с помощью:
$ TERM=xterm-256color-na man man # and then hit q
Вы можете повторить вышеуказанные шаги для других терминалов, если вы используете несколько. Если все работает как положено, вы можете установить его TERM
через rc-файл оболочки.
Вы также можете напрямую указать имя терминала в качестве параметра infocmp
, например:
$ infocmp -1 screen > screen
Включить альтернативное переключение экрана
Некоторые терминалы поддерживают альтернативную функцию переключения экрана (например, экран ), но отключают ее по умолчанию .
Поскольку screen
вы можете включить его через ~/.screenrc
:
$ cat ~/.screenrc
altscreen
Если вы осуществляете удаленный вход через ssh, скажем, в систему Solaris, возможно, удаленно настроенная общесистемная база данных terminfo является устаревшей, сломанной или содержит некоторые необычные / специфичные для Solaris значения по умолчанию, которые не соответствуют терминалам «переднего края» ты запускаешь ssh.
Таким образом, можно просто скопировать локальную базу данных terminfo из / usr / share / info (на клиенте) в host:~/.terminfo
(на сервере).
Если скомпилированный формат terminfo не совместим, вы также можете экспортировать / импортировать записи, как в предыдущем абзаце.
Я пробовал использовать файл terminfo-db из установки Cygwin, и копирование его непосредственно в систему Solaris 10 сработало.
Если вы хотите разделить альтернативную базу данных terminfo между пользователями, вы указываете ее путь через TERMINFO
переменную окружения.
Игнорировать контрольную последовательность
Некоторые терминалы поддерживают отключение последовательности управления для альтернативного переключения экрана. Например, у xterm есть опция, у gnome-Terminal нет.
Для xterm это X-ресурс , например
XTerm*titeInhibit: true
Конфигурации, специфичные для программы
Некоторые программы имеют конфигурационные файлы для настройки команд последовательности / terminfo, которые они отправляют. Например
$ LESS=X less foo
настраивает less
не очищать / восстанавливать экран.
Для vim
вас можно включить что-то вроде
set t_ti= t_te=
в тебе ~/.vimrc
.
Я не нашел опцию, как настроить это поведение для top - по умолчанию он не отправляет экран восстановления.