我正在尝试将 terminfo 字符串从 xterm 转换为可与 iTerm2 一起使用的字符串,以便在 emacs 中使用 24 位颜色。到目前为止,我所做的调查和研究使我相信我用来设置 stf24/setb24 的 terminfo 操作代码被 iTerm2 错误地解释了,所以我想了解它们在做什么。
以下是 emacs 需要的自定义值:
xterm-24bit|xterm with 24-bit direct color mode,
use=xterm-256color,
setb24=\E[48:2:%p1%@{65536@}%/%d:%p1%@{256@}%/%@{255@}%&%d:%p1%@{255@}%&%dm,
setf24=\E[38:2:%p1%@{65536@}%/%d:%p1%@{256@}%/%@{255@}%&%d:%p1%@{255@}%&%dm,
# Use semicolon separators.
xterm-24bits|xterm with 24-bit direct color mode,
use=xterm-256color,
setb24=\E[48;2;%p1%@{65536@}%/%d;%p1%@{256@}%/%@{255@}%&%d;%p1%@{255@}%&%dm,
setf24=\E[38;2;%p1%@{65536@}%/%d;%p1%@{256@}%/%@{255@}%&%d;%p1%@{255@}%&%dm,
我知道第一位例如\e[48:2:
是指定颜色位置(在本例中为背景)和颜色格式(2 表示需要 3 个控制段的完整 24 位 RGB 格式)的转义码。查看此文档“支持的 TERMINFO 操作代码”,我知道它从堆栈中获取参数“1” %p1
,并对此 () 执行一些其他操作,%/ - division, %& - AND
但我不确定%@
括号中的数字是什么意思或什么mean %@{65536}
,以及%dm
最后的作用。有人可以帮忙吗?
总的来说,我相信 emacs 只传递了一个参数(大概是 256^3 0-16,777,216 内的一个数字),所以我认为这在某种程度上将它分解为终端需要的 3 种组成 RGB 颜色,但我还没有完全找出如何,然后是否存在不兼容以及它在哪里。