terminfo 操作代码中的 @(at 符号)是什么意思?

What do the @ (at symbols) in a terminfo manipulation code mean?

我正在尝试将一个 terminfo 字符串从 xterm 转换为可以与 iTerm2 一起使用的字符串,以便 get 24bit colors working in emacs。到目前为止,我所做的调查和研究让我相信我用来设置 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 格式)的转义码。 查看此文档 'Supported TERMINFO Manipulation Codes' 我知道它使用 %p1 从堆栈中获取参数“1”,并对此执行一些其他操作 (%/ - division, %& - AND) 但我不是确定 %@ 的含义或括号中的数字 %@{65536} 的含义,以及 %dm 最后的含义。有人可以帮忙吗?

总的来说,我相信 emacs 只传递一个参数(大概是 256^3 0-16,777,216 范围内的一个数字),所以我认为这以某种方式将它分解为终端需要的 3 种组成 RGB 颜色,但是我还没有完全弄清楚如何,然后是否存在不兼容以及它在哪里。

@ 标记不是 terminfo 描述的一部分;它们在原始 texinfo 文件中使用,以防止花括号被解释。您正在阅读的内容 cut/paste 来自不理解标记任何部分的人...

如果没有 @ 标记,您将拥有常量,例如用于算术的 %{65536}

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