规范地确定光标键的转义序列

时间:2013-09-06 13:02:05

标签: shell terminal arrow-keys ansi-escape

我想对光标键做出反应;为此,我想找出当前终端以规范方式使用的转义序列。大多数解决方案在源代码中只有字符串"\e[A"等。我知道如果目标系统使用不同的转义序列,这是不可移植的。

我尝试使用tput来获取正确的转义序列,但tput kcud1返回的转义序列与用于向下箭头键的转义序列不同:它返回"\eOB",但键结果为"\e[B"。但是没有给tput的capname产生这个字符串;我能管理的最好的是tput cud,返回“\ e [%p1%dB”,从中剥离所有参数,最后将成为所需的字符串。但是剥离参数也听起来不太好。

找出按下时箭头键产生的正确转义序列的规范方法是什么?我会对使用tputcurses或甚至是完全不同的方法的解决方案感到满意。

2 个答案:

答案 0 :(得分:2)

光标键发送的内容取决于键盘模式。

tput报告其应用程序模式值,但默认情况下,键盘处于标准模式。

DEKCKM命令可用于更改它们的光标键行为,例如:

printf "\033[?1h"

或者您可以使用smkx命令将键盘设置为应用程序模式:

tput smkx

重置:

printf "\033[?1l"

tput rmkx

答案 1 :(得分:0)

我认为您需要的是tput cud1(没有k)。您还可以在此处获取tput命令列表:

  

http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html

此外,您可以通过VAR=$(tput xyz)将这些序列存储在变量上。

一切都在man terminfo。在线:http://www.manpagez.com/man/5/terminfo/