Terminal terminfo参数化字符串中的If else表达式 我在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.

Terminal terminfo参数化字符串中的If else表达式 我在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.,terminal,c++14,terminfo,termcap,Terminal,C++14,Terminfo,Termcap,所以,我的问题是: 正如手册页所说,字符串中的expr部分通常可以将值推送到堆栈上,那么expr部分还可以做哪些事情,也就是说,除了在堆栈上推送值之外,expr部分还可以执行哪些其他操作?简称:“任何操作” long:terminfo表达式最多使用9个参数(显而易见,数字1-9,这可能是sgr有9个参数的原因) 在给定的示例中 %?

所以,我的问题是:
正如手册页所说,字符串中的
expr
部分通常可以将值推送到堆栈上,那么
expr
部分还可以做哪些事情,也就是说,除了在堆栈上推送值之外,expr部分还可以执行哪些其他操作?

简称:“任何操作”

long:terminfo表达式最多使用9个参数(显而易见,数字1-9,这可能是
sgr
有9个参数的原因)

在给定的示例中

%?
%t
零件
%e
%

把它看作一个程序

%?



零件

<

它可以包含其他的if-then-else片段。但是,terminfo的目的是将这些参数转换为字符串以发送到终端。文字字符应为“输出”。您可以将文字字符作为部分,这些字符将用于输出。或者,您可以计算一些表达式并暂时保存它,例如,在堆栈上。在thenpart和elsepart中都这样做,可以在if-then-else之后弹出堆栈,并将其用于输出,或用于其他表达式


xterm使用setf、setb和sgr中的功能(请参见链接)。

这些功能可以嵌套吗?ie expr/thenpart/elsepart可以包含更多这些吗?是的,例如,它也可以。