[英]Termcap tgetstr getting arrow keys
我正在尝试从termcap数据库中获取表示箭头键的字符串。 使用以下内容:
char *buffer = malloc(2048);
tgetent(buffer, getenv("TERM")); //TERM = xterm-256color
char *key_up = tgetstr("ku", &buffer); // gives me \EOA
ku
通过键入向上箭头键发送的输入字符串。
问题在于,向上箭头键实际上是在输入程序时作为\\E[A
传递的。 这样也传递给了cat
。 我尝试了不同的终端仿真器和外壳,它们都以相同的方式通过了它。
因此,我决定为该键硬编码该值,而不是使用ku
值,它可以工作,但感觉不正确。
我在这里想念什么吗? 如何以编程方式获得正确的ku
值?
终端说明是为全屏应用程序编写的,这些应用程序使用分配给它的一个或多个终端功能进行初始化。 大约一半的终端描述会初始化终端的光标键和小键盘键以使用应用程序模式 。 在应用程序模式下,这些键发送不同的字符。
ncurses常见问题解答我的光标键不起作用 ,将详细介绍。
如果您尝试对某些非屏幕命令行应用程序使用终端说明,则可以使命令解析器将\\E[
(CSI)和\\EO
(SS3)视为同一事物,而忽略两者之间的区别两种模式。 如xterm手册页中所述,这是在zsh
某些配置中完成的。
顺便说一下,如果您的“ termcap”实际上是terminfo系统的接口(例如ncurses),则不必分配缓冲区,因为该缓冲区将被忽略。 ncurses的手册说:
- 仿真将忽略缓冲区指针
bp
。 termcap库会将终端描述的副本存储在此指针引用的区域中。 但是, ncurses以编译的二进制形式存储其终端描述,这不是同一回事。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.