Запретить экрану GNU изменять размер экрана

21

Каждый раз, когда я запускаю screen (screen -A) или пытаюсь подключиться к уже запущенному экранному сеансу (screen -Ax), размер моего терминала уменьшается до 80 столбцов. Я хочу предотвратить изменение размера экрана моего терминала.

Я использую iTerm на Snow Leopard, а мои сеансы на экране - на машине centos (я использую bash в качестве оболочки).

Крыла
источник

Ответы:

31

Попробуйте добавить это (из /etc/screenrc) к вашему ~/.screenrc:

# Change the xterm initialization string from is2=\E[!p\E[?3;4l\E[4l\E>
# (This fixes the "Aborted because of window size change" konsole symptoms found
#  in bug #134198)
termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

Возможно, вам придется изменить «xterm», чтобы он соответствовал вашему $TERM.

В termcapinfoнаборах строк is(ininitialization строка) для любого терминала с именем , начиная с «XTerm» к последовательности эвакуации кодов. \Eпредставляет escapeи коды следующие:

\E[r       - set scrolling region to default (full size of window)
\E[m       - reset all resources (keyboard) to their initial values
\E[2J      - Erase in Display (ED). 2 -> Erase All.
\E[H       - set cursor position to default (1, 1)
\E[?7h     - DEC Private Mode Set. 7 -> Wraparound Mode
\E[?1;4;6l - DEC Private Mode Reset. 1 -> Normal Cursor Keys; 4  -> Jump (Fast) Scroll; 6 -> Normal Cursor Mode

Замененная строка имела следующие коды:

\E[!p      - Soft terminal reset
\E[?3;4l   - DEC Private Mode Reset. 3 -> 80 Column Mode; 4 -> Jump (Fast) Scroll
\E[4l      - Reset Mode. 4 -> Replace Mode
\E>        - Normal keypad

(источник: последовательности управления XTerm )

Приостановлено до дальнейшего уведомления.
источник
Благодарность! добавил этот ответ на serverfault.com/questions/158508/…
Джошуа Д'Алтон
Не могли бы вы расшифровать строку termcapinfo?
Гекл
2
@ Хакл: я добавил объяснение кодов побега.
Приостановлено до дальнейшего уведомления.
1

Объяснение (и предлагаемые эквиваленты) для строки инициализации xterm не совсем точны.

Начиная со строки из описания терминала xterm:

is2=\E[!p\E[?3;4l\E[4l\E>

у нас есть

CSI ! p   Soft terminal reset (DECSTR).
CSI ? Pm l
      DEC Private Mode Reset (DECRST).
...
        Ps = 3  -> 80 Column Mode (DECCOLM).
        Ps = 4  -> Jump (Fast) Scroll (DECSCLM).
CSI Pm l  Reset Mode (RM).
...
        Ps = 4  -> Replace Mode (IRM).
ESC >     Normal Keypad (DECKPNM).

Но DECSTRсбрасывает несколько вещей, не найденных в замене:

  • форма и внешний вид курсора
  • наборы символов
  • другие режимы клавиатуры , связанные с приложением / нормальные режимы ( DECCKM, KAM, DECKPAM)
  • обтекание (и обратное свертывание)
  • режим происхождения

Кроме того, он не очищает экран.

Причиной использования DECSTR( с 1997 года ) является сохранение размеров termcap достаточно маленькими, чтобы соответствовать пределу termcap в 1024 байта.

Параметр для screenнаходится в пакете Debian; упомянутый в комментарии отчет об ошибке - Debian # 134198 - screen: имеет какую-то странную проблему эмуляции, наиболее заметную в irssi и konsole , начиная с 2002 года. screenне распознает эту последовательность, и, кстати, KDE konssole не реализует эту последовательность, как видно в KDE # 134892 , в то же время его разработчики заявляют в KDE # 145977, что они предпочитают не использовать TERMзначение, отличное от xterm. Так как некоторым пользователям может понадобиться описание терминала, которое соответствует возможностям konsole, оно находится в ncurses konsole, например:

is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8

против

is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l

При удалении паразитного четкого экрана соответствующая часть настройки экрана

is2=\E[r\E[m\E[?7h\E[?1;4;6l

так что было оставлено (кроме DECCOLM) \E[4l.

В \E7и \E8в строке инициализации сохранить / восстановить положение курсора при настройке полей прокрутки. Как и в режиме вставки, некоторые пользователи заметят отсутствие этой функции.

DECCOLMСмысл настройки заключается в том, чтобы подавить переключение (столбец 80/132), и работа с урезанной и довольно старой настройкой экрана может не работать, а также адаптироваться к описанию терминала, написанному для терминала.

Дальнейшее чтение:

Томас Дики
источник