Answers:
尝试将此(从/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控制序列)
对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 —屏幕:存在某种奇怪的仿真问题,最明显的是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列)交换,并从屏幕的截下来,而旧的定制工作可能无法正常工作,以及从写的终端适配描述为终端。
进一步阅读: