Як налаштувати відновлення екрана в терміналі?


10

Залежно від терміналу / середовища наступна послідовність має різні ефекти:

$ ls
1
2
$ man ls
enter q

Або я бачу останній відображений екран на головній сторінці над поточним запитом, або виводиться вихід ls та попередній вихід оболонки. Такий же ефект спостерігається, наприклад, при використанні vimта призупиненні його, щоб зробити щось на оболонці.

У Fedora 19 - за замовчуванням на екрані, здається, немає відновлення, gnome-terminal / xterm використовує do-Restore за замовчуванням.

Для Solaris це залежить від використовуваного терміналу / terminfo db, як здається.

Я хочу налаштувати поведінку відновлення послідовно між різними системами / терміналами.


Якщо ви завжди запускаєте екран GNU, ви отримаєте послідовну поведінку.
jordanm

Відповіді:


16

Здається, ця функція називається "альтернативним екраном" або переключенням між звичайним та альтернативним екраном.

Дослідити його можна за допомогою xterm. Наприклад , тип man manВ одному xtermі виходу людини. Тепер ви можете перейти на альтернативний екран через Ctrl+ Mouse2 (середній клацання) -> "Показати альтернативний екран". Крім того, ви можете безпосередньо вводити послідовності керування xterm , наприклад:

$ echo -e '\033[?47h' # alternate screen
$ echo -e '\033[?47l' # normal screen

Останні дві команди також працюють у gnome-терміналі (можливо, в інших теж).

Що відбувається , коли man/ vi/ і lessт.д. запуск в основному вони посилають абстрактну команду ясно екрану. Після виходу (або призупинення) вони надсилають абстрактну команду відновлення екрана. Як команда переводиться на конкретні послідовності управління терміналом, визначено в базі даних 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, можливо, віддалено налаштована термінальна база даних для всієї системи є своєрідною історією, зламаною або містить деякі незвичайні / специфічні для Solaris типові параметри, які не відповідають терміналам 'край краю кровотоку' ви запускаєте ssh.

Таким чином, це можливість просто скопіювати локальну базу даних terminfo з / usr / share / info (на клієнті) в host:~/.terminfo(на сервер).

Якщо складений формат terminfo не сумісний, ви також можете експортувати / імпортувати записи, як у попередньому пункті.

Я пробував термінал-db з установки Cygwin і копіював його безпосередньо в систему Solaris 10.

У випадку, якщо ви хочете поділитися альтернативним терміналом db між користувачами, ви вкажете його шлях через TERMINFOзмінну середовища.

Ігноруйте послідовність управління

Деякі термінали підтримують відключення послідовності керування для альтернативного переключення екрана. Наприклад, xterm має опцію, gnome-terminal не має.

Для xterm це X-ресурс , наприклад

XTerm*titeInhibit: true

Конфігурації програми

Деякі програми мають файли конфігурації, щоб налаштувати, яку послідовність керування / команду terminfo вони надсилають. Наприклад

$ LESS=X less foo

налаштовує lessне очищати / відновлювати екран.

Бо vimможна включити щось на кшталт

set t_ti= t_te=

в тобі ~/.vimrc.

Я не знайшов опцію, як налаштувати таку поведінку для верху - за замовчуванням не надсилає екран відновлення.


Sed cmdd фактично видаляє весь рядок, що містить smcupабо rmcup. У моєму випадку є інші речі, що йдуть на одній лінії з ними. Ці інші матеріали також видалено. Тож, може, щось на кшталт s/[sr]mcup=[^,]*,//'краще.
Mingliang
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.