В зависимости от терминала / среды следующая последовательность имеет разные эффекты:
$ ls
1
2
$ man ls
enter q
Либо я вижу последний отображенный экран man-страницы над текущим приглашением, либо вывод ls, и предыдущий вывод оболочки восстанавливается. Тот же эффект наблюдается, например, при использовании, vim
а затем приостановке, чтобы сделать что-то на оболочке.
В Fedora 19 - экран по умолчанию выглядит как no-restore, gnome-терминал / xterm по умолчанию использует do-restore.
На Solaris это зависит от используемого терминала / terminfo db.
Я хочу настроить поведение восстановления последовательно между различными системами / терминалами.
Ответы:
Эта функция называется альтернативным экраном или переключением между обычным и альтернативным экраном.
Вы можете исследовать это, используя xterm. Например , тип
man man
В одномxterm
и выхода человека. Теперь вы можете переключиться на альтернативный экран с помощью Ctrl+ Mouse2 (средний щелчок) -> «Показать альтернативный экран». В качестве альтернативы вы можете напрямую ввести управляющие последовательности xterm , например:Последние две команды также работают в gnome-терминал (возможно, в других тоже).
То, что происходит, когда
man
/vi
/less
и т.д. запускаются, в основном, они посылают абстрактную команду очистки экрана. При выходе (или приостановке) они отправляют абстрактную команду восстановления экрана. Как команда переводит в конкретные последовательности управления терминалом, определено в базе данных terminfo .Отключить альтернативное переключение экрана
Что должно работать для всех терминалов, так это настроить локальные записи terminfo, то есть удалить отображение абстрактных экранных команд очистки / восстановления.
Вы можете сделать это так - для текущей
$TERM
записи (например, для gnome-терминала в Fedora 19):Теперь вы можете проверить это с помощью:
Вы можете повторить вышеуказанные шаги для других терминалов, если вы используете несколько. Если все работает как положено, вы можете установить его
TERM
через rc-файл оболочки.Вы также можете напрямую указать имя терминала в качестве параметра
infocmp
, например:Включить альтернативное переключение экрана
Некоторые терминалы поддерживают альтернативную функцию переключения экрана (например, экран ), но отключают ее по умолчанию .
Поскольку
screen
вы можете включить его через~/.screenrc
:Если вы осуществляете удаленный вход через ssh, скажем, в систему Solaris, возможно, удаленно настроенная общесистемная база данных terminfo является устаревшей, сломанной или содержит некоторые необычные / специфичные для Solaris значения по умолчанию, которые не соответствуют терминалам «переднего края» ты запускаешь ssh.
Таким образом, можно просто скопировать локальную базу данных terminfo из / usr / share / info (на клиенте) в
host:~/.terminfo
(на сервере).Если скомпилированный формат terminfo не совместим, вы также можете экспортировать / импортировать записи, как в предыдущем абзаце.
Я пробовал использовать файл terminfo-db из установки Cygwin, и копирование его непосредственно в систему Solaris 10 сработало.
Если вы хотите разделить альтернативную базу данных terminfo между пользователями, вы указываете ее путь через
TERMINFO
переменную окружения.Игнорировать контрольную последовательность
Некоторые терминалы поддерживают отключение последовательности управления для альтернативного переключения экрана. Например, у xterm есть опция, у gnome-Terminal нет.
Для xterm это X-ресурс , например
Конфигурации, специфичные для программы
Некоторые программы имеют конфигурационные файлы для настройки команд последовательности / terminfo, которые они отправляют. Например
настраивает
less
не очищать / восстанавливать экран.Для
vim
вас можно включить что-то вродев тебе
~/.vimrc
.Я не нашел опцию, как настроить это поведение для top - по умолчанию он не отправляет экран восстановления.
источник
smcup
илиrmcup
. В моем случае есть другие вещи, идущие на одной линии с ними. Эти другие вещи также были удалены. Так что, может быть, что-то вродеs/[sr]mcup=[^,]*,//'
лучше.