screen 过滤掉它不支持的转义序列。它不支持更改颜色值的 xterm 样式转义序列,但仅使用终端的预定义调色板。
如果你这样做
infocmp screen-256color xterm-256color
您可能会注意到一些不同之处。处理更改颜色值的方法是initc。 (通过setaf 和setab 从调色板中选择给定颜色)。
警告消息是因为(显然)您的机器没有安装 xterm-256color 的终端描述,例如,如果您通过 ssh 连接到机器,它从本地机器获取 TERM。 screen 想知道 TERM 对 outside 有什么作用,以帮助它转换为 inside (TERM=screen)。对文档和源代码的快速阅读表明,虽然它有几个功能可以修改 in/out TERM 之间的转换,以及选择特定的 inside-TERM,但没有 .screenrc覆盖环境变量TERM的设置。
这是指向relevant chunk of code in screen的指针:
if ((attach_term = getenv("TERM")) == 0 || *attach_term == 0)
Panic(0, "Please set a terminal type.");
if (strlen(attach_term) > MAXTERMLEN)
Panic(0, "$TERM too long - sorry.");
GetTTY(0, &attach_Mode);
它确保设置了TERM,以及指向it checks if TERM corresponds to an actual terminal description的指针(向下几级):
if (*D_termname == 0 || e_tgetent(tbuf, D_termname) != 1) {
Msg(0, "Cannot find terminfo entry for '%s'.", D_termname);
return -1;
}
所以...如果您只想运行“screen”,您可以创建一个 shell 别名,或者像现在一样设置 TERM 的简单脚本。