我的应用程序在原始模式下从终端读取转义序列。当它在xterm上运行时,我得到了像“\ eOQ”的F2。但是当它在linux tty终端中运行时(通过Ctrl-Alt-F1切换)我得到了“\ e [[[B”。
确定我是否在运行终端类型应用程序时独立于F2的正确方法是什么?
答案 0 :(得分:1)
如果您想阅读终端按键,您可能希望查看类似libtermkey的内容,它会为您解决一般问题。在内部,它使用terminfo
查找的组合,或者对已修改的按键的扩展xterm
类似模型的硬编码知识,因此它可以理解Ctrl-Up
之类的常规curses /等内容。 ..不能。
while((ret = termkey_waitkey(tk, &key)) != TERMKEY_RES_EOF) {
termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_VIM);
printf("You pressed key %s\n", buffer);
if(key.type == TERMKEY_TYPE_FUNCTION &&
!key.modifiers &&
key.code.number = 2)
printf("Got F2\n");
}
答案 1 :(得分:0)
好的,因为我得到了使用[n] curses库的最佳方法。它是读取terminfo(termcap)数据库并确定您依赖于终端类型的转义序列。
没有必要使用它的终端图形功能。要使用curses获取正确的转义序列,您可以执行以下操作:
newterm(NULL, stdout, stdin);
此外,它可能通过在您的app中读取terminfo数据库来手动完成。
raw();
noecho();
keypad();
ch = getch();
if (ch == KEY_F(2)) printf("Got F2");
endwin();