为什么 xterm 显示 256 色(不是 xterm-256color)?

为什么 xterm 显示 256 色(不是 xterm-256color)?

有人可以解释一下吗?我在用着gnome-terminal。首先,一些信息:

# echo $TERM
xterm

# infocmp xterm
Reconstructed via infocmp from file: /lib/terminfo/x/xterm
colors#8, cols#80, it#8, lines#24, pairs#64

# tput colors
8

我编写了简单的脚本来创建扩展颜色集的代码:

# Output file (current directory) and text.
OFILE='xterm256_colors_test.sh'
OFILE_COLORS='terminal_256_colors'
OTEXT='Sed ut perspiciatis unde omnis iste natus error sit voluptatem...'

# Clearing the contents from previous runs.
if [ -e $OFILE ] || [ -e $OFILE_COLORS ]
then
  > $OFILE
  > $OFILE_COLORS
fi

# Bang!
echo -e '#!/bin/bash\n' | tee --append $OFILE $OFILE_COLORS &> /dev/null
echo -e "\necho -e \"" | tee --append $OFILE &> /dev/null

# \x1b is a control character changing behaviour of the shell.
# It is also the <Ctrl+V><Esc> sequence.
for i in {016..255}; do
  echo -e "\x1b[38;5;${i}m $OTEXT $i \x1b[0m" >> $OFILE
  echo -e "color${i}=\"\[\033[38;5;${i}m\]\"" >> $OFILE_COLORS
done

# End of echo.
echo '"' | tee --append $OFILE &> /dev/null

# The file should be executable.
chmod +x $OFILE

尽管使用基本的xterm终端模拟器,但当我运行生成的脚本时,我可以看到所有 240 种颜色。为什么?我想我应该换成$TERMxterm-256color一个。

答案1

环境TERM变量是您(用户)可以告诉程序(例如,emacsgreplesslsvim)它们正在运行的终端类型的一种方式,因此它们会知道其参数,包括它具有哪些功能以及什么转义序列他们需要发行才能访问它们。之所以存在这种情况,是因为一般来说,软件很难自行确定这一点(当用户通过终端是外部的,仅通过数据线连接到计算机)。

gnome-terminal是向用户提供类终端服务的程序以及用户在终端内运行的程序。  gnome-terminal可能知道设置的环境变量它是环境,在它被调用之前(DISPLAY这是一个明显的例子),但它不知道在其下运行的进程中设置的环境变量。

所以,gnome-terminal有什么能力就有什么。可以在外部调整/约束这些,例如通过命令行选项、预先存在的环境、配置文件和窗口框架中的对话框,但不能通过TERM在窗口中的外壳中进行更改。如果它能够显示 256 色,那么它就能够显示 256 色,并且您将能够通过向其发送适当的转义序列来使其这样做。但是,只要您设置TERMxterm,您运行的程序就会相信您告诉它们它们正在支持八色的终端中运行, 因此他们会将他们的请求(转义序列)限制为这些功能。您需要设置TERMxterm-256color,不是为了启用gnome-terminal显示 256 色,而是告诉诸如grepls之类的程序它使用8种以上的颜色。

相关内容