许多现代终端都源自 xterm 或 rxvt,并支持我们目前使用的转义序列。一些随各种 Unix 版本提供的专有终端使用它们自己的转义序列。
aixterm
aixterm 识别 xterm 转义序列。
wsh、xwsh 和 winterm
这些终端设置 $TERM=iris-ansi 并使用以下转义序列
ESCP1.ystringESC\ 将窗口标题设置为 stringESCP3.ystringESC\ 将图标标题设置为 stringxwsh 转义序列的完整列表,请参阅 xwsh(1G) 帮助手册页。
Irix 终端也支持 xterm 转义序列来单独设置窗口标题和图标标题,但不支持同时设置两者的转义序列。
cmdtool 和 shelltool
cmdtool 和 shelltool 都设置 $TERM=sun-cmd 并使用以下转义序列
ESC]lstringESC\ 将窗口标题设置为 stringESC]LstringESC\ 将图标标题设置为 string
dtterm
dtterm 设置 $TERM=dtterm,并且似乎同时识别标准的 xterm 转义序列和 Sun cmdtool 序列(在 Solaris 2.5.1、Digital Unix 4.0、HP-UX 10.20 上测试)。
hpterm 设置 $TERM=hpterm 并使用以下转义序列
ESC&f0klengthDstring 将窗口标题设置为长度为 length 的 stringESC&f-1klengthDstring 将图标标题设置为长度为 length 的 string
一个计算长度并回显字符串的基本 C 程序看起来像这样
#include <string.h>
int main(int argc, char *argv[])
{
printf("\033&f0k%dD%s", strlen(argv[1]), argv[1]);
printf("\033&f-1k%dD%s", strlen(argv[1]), argv[1]);
return(0);
}
我们可以编写类似的 shell 脚本,使用 ${#string} (zsh、bash、ksh) 或 ${%string} (tcsh) 扩展来查找字符串长度。以下是用于 zsh 的脚本
case $TERM in
hpterm)
str="\e]0;%n@%m: %~\a"
precmd () {print -Pn "\e&f0k${#str}D${str}"}
precmd () {print -Pn "\e&f-1k${#str}D${str}"}
;;
esac