我试图准确理解终端模拟器(iTerm2)中的颜色处理方式。
在iTerm2中我可以配置我的" base 16"调色板 - 在iTerm2中,这是使用HSL而不是16位RGB值完成的。以这种方式定义的颜色是原生的 - 它们使用cocoa API,并不局限于典型的256色调色板(它们以真实颜色呈现)。
X11' s rgb.txt定义256色调色板中的颜色名称。
在shell,bash或zsh中,我可以使用带有echo -e "\e[38;5;82mHello \e[38;5;198mWorld"
的16位256调色板打印文本(第三个参数是xterm颜色代码)
在vim(终端不是gui)中,颜色被用作' cterm'定义高光时的值(例如::highlight Normal ctermfg=188 ctermbg=233 guifg=#e8e8d3 guibg=#151515
),但据我所知 - 没有办法使用RGB代码定义终端颜色,所以虽然我可以在真彩色中显示base16颜色,其余的颜色任意限制在256色调。
我无法弄清楚的是rgb值映射到xterm代码的位置。它似乎是一种任意关系(xterm代码似乎与RGB值没有函数关系),所以我假设某处必须有映射。
我相信可以在.Xresources(here is an example)中重新定义颜色,但我不确定几件事情:
所以在这一点上我相信它的工作方式是:
因此,颜色映射或转换中不涉及其他应用程序(X11或其他任何应用程序) - 它直接从终端应用程序到终端仿真器。
就是这种情况,因为iTerm2只允许用户配置基本的16种颜色"用户在仅渲染时可以自由使用真彩色,但仅限于所有其他颜色的网页安全调色板。
这是对的吗?
答案 0 :(得分:3)
The default xterm palette是标准的,并且预计在每个xterm实现中都是相同的。 与不同来自或多或少的标准rgb.txt仅供GUI程序使用。
前16种颜色,0-15,或多或少标准名称,“红色”,“深绿色”等,但所有其他颜色只能通过其编号来引用, 16至255。
前16种颜色通常可由用户定义(使用CMYK,HSL,RGB或十六进制表示法,无关紧要),因此在colorscheme中使用“red”或“2”几乎是一个镜头。黑暗,因为无法保证“红色”实际上是红色的。 Solarized是一个可怕的例子,传统上被称为“亮绿色”的颜色实际上是深灰色。
大多数“现代”终端模拟器允许您使用GUI定义这16种颜色,但其他更“老派”模拟器(如xterm或rxvt)使用~/.Xresources
。 iTerm完全忽略了该文件,因此您不应该浪费时间。
有可能change the xterm palette,但很少有人知道这使得这种做法非常不常见。
因此...