例如,在程序中我想获取终端上的当前光标位置(tput u7
或\E[6n
在 xterm 上):
CSI P s n
P s = 6 → Report Cursor Position (CPR) [row;column] as CSI r ; c R
我将此序列写入程序中的标准输出。之后,我在标准输入上读取了终端的回复。 (在此期间 tty 处于原始模式)
问题是:如果用户恰好在发送请求后但在发送回复之前或在回复中间输入转义序列(通过按某个键)或数字或任何内容,该怎么办?这个功能应该如何运作?这个机制有缺陷吗,还是我遗漏了什么?
答案1
报告光标位置和键盘输入都来自您的终端。如果终端收到这样的转义序列,则应在发送缓冲的键盘输入之前对其进行解释。只有在发送光标位置后,才应将键盘输入发送到程序。我不能说这里的所有终端是否都能正常工作。如果终端中有客户端软件,您就无法控制这一点。