防止GNU屏幕调整显示大小


21

每次我启动屏幕(屏幕-A)或尝试连接到已经运行的屏幕会话(屏幕-Ax)时,终端的大小都会调整为80列。我想防止屏幕调整终端大小。

我在Snow Leopard上使用iTerm,并且屏幕会话在centos机器上(我使用bash作为外壳)。

Answers:


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名称以“ 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控制序列



您介意对termcapinfo行进行解码吗?
Huckle

2
@Huckle:我添加了转义码的说明。
暂停,直到另行通知。

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重置替换中未找到的几件事:

  • 光标的形状和外观
  • 字符集
  • 有关应用程序的其他键盘模式/正常模式(DECCKMKAMDECKPAM
  • 环绕式(和反向环绕式)
  • 原点模式

此外,它不会清除屏幕。

使用DECSTR自1997年以来)的原因是将termcap的大小保持足够小以适合termcap的1024字节限制。

的设置screen来自Debian软件包;注释中提到的错误报告是Debian#134198 —屏幕:存在某种奇怪的仿真问题,最明显的是irssi和konsole(从2002年开始)。 screen它无法识别该序列,并且偶然地,KDE konsole无法实现该序列,如所见在KDE#134892中,而同时开发人员在KDE#145977中指出,他们更喜欢不使用与相同的TERMxterm。由于某些用户可能想要与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列)交换,并从屏幕的截下来,而旧的定制工作可能无法正常工作,以及从写的终端适配描述终端。

进一步阅读:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.