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


11

有人可以解释一下吗?我正在使用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第一位。

Answers:


18

TERM环境变量是一种方式,你的用户,可以告诉程序(例如,emacsgreplessls,和vim)什么样的终端中运行了,所以他们会知道它的参数,包括哪些功能,它有什么转义序列,他们需要发出访问它们的权限。之所以存在这个问题,是因为一般来说,软件很难自行确定(当用户通过外部终端与计算机进行连接,并且仅通过数据电缆连接到计算机时,这几乎是不可能的)。

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.