terminfo 参数化字符串中的 else 表达式

If else expression in terminfo parameterized strings

我正在用 C++ 为参数化字符串(用于指定终端的某些终端功能)实现解析器。然后我在 terminfo 的手册页上看到了这个:

%? expr %t thenpart %e elsepart %;
   This forms an if-then-else.  The %e elsepart is optional.  Usually the %? expr part  pushes
   a value onto the stack, and %t pops it from the stack, testing if it is nonzero (true).  If
   it is zero (false), control passes to the %e (else) part.

所以,我的问题是:
正如手册页所说,字符串中的 expr 部分可以 通常 将值压入堆栈,因此 expr 部分还可以做些什么, 即expr部分除了压栈还可以做哪些操作?

短:"anything"

long:terminfo 表达式最多使用 9 个参数(原因很明显,数字 1-9 这反过来可能是 sgr 有 9 个参数)。

在给定的示例中,

%? expr %t thenpart %e elsepart %;

把它想象成一个程序

%?
</code><em>expr</em><br> <strong><code>%t
</code><em>thenpart</em><br><strong><code>%e
</code><em>elsepart</em><br><strong><code>%;

可以包含其他 if-then-else 件。但是,terminfo 的目的是将这些参数转换为字符串以发送到终端。文字字符将是 "output"。您可以将文字字符作为 thenpart,这些字符将用于输出。或者你可以计算一些表达式并暂时保存它,例如,在堆栈上。在 thenpartelsepart 中执行此操作可以让您在 if-then-else 和要么将其用于输出,要么用于其他表达式。

xterm 使用 setfsetb[=10 中的功能=](参见 link 至 "xterm-basic")。