防止 gnu screen 调整显示尺寸

防止 gnu screen 调整显示尺寸

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

我在 Snow Leopard 上使用 iTerm,我的屏幕会话在 centos 机器上(我使用 bash 作为我的 shell)。

答案1

尝试将这个(来自/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

该行将任何名称以“xterm”开头的终端的(初始化字符串)termcapinfo设置为转义代码序列。表示和代码如下:is\Eescape

\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 控制序列

答案2

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 的 1024 字节限制。

的设置screen来自 Debian 包;评论中提到的错误报告是Debian #134198 — screen: 存在某种奇怪的模拟问题,在 irssi 和 konsole 上表现最为明显,从 2002 年开始。 screen无法识别该序列,顺便说一句,KDE konsole 不实现该序列,如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 列)切换,并且从屏幕的缩减和相当旧的自定义工作可能不如从终端描述中改编那样有效为了终点站。

进一步阅读:

相关内容