19

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

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

2 ответа2

29

Попробуйте добавить это (из /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 (строка инициализации) для любого терминала с именем, начинающимся с "xterm", до последовательности escape-кодов. \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)

0

Объяснение (и предлагаемые эквиваленты) для строки инициализации 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), и работа с урезанной и довольно старой настройкой экрана может не работать, а также адаптироваться к описанию терминала, написанному для терминала.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .