TLDR:终端颜色背后的理论是什么?
我有一个固定的 LS_COLORS 数字值:
no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;33:*.cmd=00;33:*.exe=00;33:*.com=00;33:*.btm=00;33:*.bat=00;33:*.sh=00;33:*.csh=00;33:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:*.c=00;41:*.cpp=00;41:*.h=00;44:*.cu=00;43:*.cuh=00;43:ex=00;32
我想知道是什么原因导致 gnome-terminal、urxvt 和 yakuake 对于相同的文件类型显示明显不同的颜色?差异范围从非常相似(但明显不同)到截然不同(棕色与黄色)。
同样,vim 颜色的显示方式也存在差异,我在所有三个终端中看到非常不同的颜色。 t_Co=8(vim 支持 8 种颜色)和 t_Co=256(vim 支持 256 种颜色)时都是如此。
更糟糕的是,当我从互联网上复制具有英文颜色名称的 .XResources 时,vim 中相同的颜色方案显示出截然不同的颜色。 (我想我可以将此归因于 vimscheme 中名称的使用以及 .Xresources 的颜色重新定义)
有人可以帮助我理解终端颜色工作原理背后的理论吗?一个链接会很好用。如果有人感觉特别慷慨 - 也许他们也可以提供提示以确保我始终拥有一个标准环境,特别是在 vim 环境中?
我应该注意到,在 yakuake 上,我的颜色主题是:“Linux 主题”(这似乎只是标准主题),而在 gnome 终端上我没有主题。当我检查“用户系统颜色”选项时,颜色甚至更加灾难性,并且输出本身被破坏(例如,香草ls
在不同的行上显示每个文件)。对于 urxvt,我在 .Xresources 和产量中定义的唯一与颜色相关的字段xrdb -q
是:
Urxvt.background: #000000
Urxvt.foreground: #FFFFFF
好吧,用一些截图来解释我在说什么(第一个是 yakuake,第二个是 urxvt)
差别显然是很大的...
使用:http://www.vim.org/scripts/script.php?script_id=1349(第一个是 yakuake,第二个是 urxvt)
答案1
索引调色板具有可供解释的实际渲染 - 在实际硬件上,有不同的标准(特别是棕色与深黄色,棕色更有用且更好看)。
只要看看这个: https://en.wikipedia.org/wiki/Color_Graphics_Adapter
在终端模拟器上,这取决于配置。大多数模拟器都有一个定义的模式 ( echo $TERM
),表示它正在模拟哪种老式硬件。颜色是最小的变化 - 其他控制代码(控制光标位置的不可见字符串、粗体/反转视频、闪烁等)也可以有不同的代码。当终端类型设置不正确(例如通过 ssh)时按下光标时,有时会出现这样的垃圾。一些更复杂的模拟器实际上并不关心古老的颜色标准,而是让您定义自己的颜色(Yakuake 使用的 Konsole - 有颜色配置文件)。现代终端模拟器实际上支持比这更多的颜色(256),但是当然,在终端中运行的应用程序必须识别此功能(通过 termcap 或其他东西,或通过读取$TERM
变量),并输出正确的字符组合才能使用它们。
你真正想读的是这个,甚至还有一个颜色表: https://en.wikipedia.org/wiki/ANSI_escape_code