我正在 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 没有出现在比较中,这是否意味着它们在理论上不受支持,或者它们在这两个术语中都很常见?
它之所以有效,是因为在 (ECMA-48) 标准终端中,两个字符串的效果没有差异。两者都将光标发送到屏幕的左上角。然后一个 (
\E[J
) 清除屏幕的其余部分,而另一个 (\E[2J
) 清除整个屏幕:(来自XTerm 控制序列)