我想对光标键做出反应;为此,我想找出当前终端以规范方式使用的转义序列。大多数解决方案在源代码中只有字符串"\e[A"
等。我知道如果目标系统使用不同的转义序列,这是不可移植的。
我尝试使用tput
来获取正确的转义序列,但tput kcud1
返回的转义序列与用于向下箭头键的转义序列不同:它返回"\eOB"
,但键结果为"\e[B"
。但是没有给tput的capname产生这个字符串;我能管理的最好的是tput cud,返回“\ e [%p1%dB”,从中剥离所有参数,最后将成为所需的字符串。但是剥离参数也听起来不太好。
找出按下时箭头键产生的正确转义序列的规范方法是什么?我会对使用tput
或curses
或甚至是完全不同的方法的解决方案感到满意。
答案 0 :(得分:2)
光标键发送的内容取决于键盘模式。
tput
报告其应用程序模式值,但默认情况下,键盘处于标准模式。
DEKCKM命令可用于更改它们的光标键行为,例如:
printf "\033[?1h"
或者您可以使用smkx
命令将键盘设置为应用程序模式:
tput smkx
重置:
printf "\033[?1l"
或
tput rmkx
答案 1 :(得分:0)
我认为您需要的是tput cud1
(没有k
)。您还可以在此处获取tput
命令列表:
此外,您可以通过VAR=$(tput xyz)
将这些序列存储在变量上。
一切都在man terminfo
。在线:http://www.manpagez.com/man/5/terminfo/