xterm 和 screen 之间的 TERM ANSI 转义序列兼容性,尽管 infocmp 没有这么说

xterm 和 screen 之间的 TERM ANSI 转义序列兼容性,尽管 infocmp 没有这么说

我正在 mac 上的 zsh 中制作一个使用 tmux 的脚本,在令人惊叹的之后https://unix.stackexchange.com/users/22565/st%c3%a9phane-chazelas回答,我发现当我使用 tmux 时,它使用与我的主机不同的解释器。

因此,当我从脚本 tput 命令向 tty 和 tmux 窗格输出相同的文字时,我想知道我正在生成的 ANSI 转义序列是否存在一些不兼容性。

我发现 $TERM 在我的 mac 中是 xterm-256color,在 tmux 窗格中是 screen-256color,因此我发出

%> infocmp xterm-256color screen-256color

我正在使用使用 tput clear、civis、sgr0、cnorm、rc、sc、home、cd、cr、el、cub1、cud、cuf 的代码。代码正在运行,输出是在 xterm 上下文中使用 tput 生成的,并且在 tee 时在 tty 和 tmux 上都能很好地呈现。

但根据 infocmp 的说法,例如,clear 在这两个术语上都有不同的转义序列:

comparing xterm-256color to screen-256color.
        clear: '\E[H\E[2J', '\E[H\E[J'

那么它如何运作呢?

作为一个附带问题,我的命令的 msot 没有出现在比较中,这是否意味着它们在理论上不受支持或者它们在这两个术语中都很常见?

答案1

它之所以有效,是因为在 (ECMA-48) 标准终端中,两个字符串的效果没有差异。两者都将光标发送到屏幕的左上角。然后一个 ( \E[J) 清除屏幕的其余部分,而另一个 ( \E[2J) 清除整个屏幕:

CSI Ps J  Erase in Display (ED), VT100.
            Ps = 0  ⇒  Erase Below (default).
            Ps = 1  ⇒  Erase Above.
            Ps = 2  ⇒  Erase All.
            Ps = 3  ⇒  Erase Saved Lines, xterm.

(从XTerm 控制序列

相关内容