0

我正在尝试将 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 颜色,但我还没有完全找出如何,然后是否存在不兼容以及它在哪里。

4

1 回答 1

0

这些@标记不是terminfo描述的一部分;它们在原始texinfo文件中用于防止花括号被解释。您正在阅读的内容是从不了解标记的任何一部分的人那里剪切/粘贴的...

没有@标记,您将拥有常数,例如,%{65536}在算术中使用。

最后的“%dm”只是第三个参数,即RGB中的蓝色值(注意还有另外两个“%d”标记),最后一个字符“m”。

于 2017-05-10T00:36:17.700 回答