0

我的应用程序以原始模式从终端读取转义序列。当它在 xterm 上运行时,我得到了 F2,例如“\eOQ”。但是当它在 linux tty 终端中运行时(通过 Ctrl-Alt-F1 切换)我得到了“\e[[[B”。
确定我的 F2 独立于运行的终端类型应用程序的正确方法是什么?

4

2 回答 2

1

如果您想阅读终端按键,您可能想查看类似libtermkey的内容,它可以为您抽象出一般问题。在内部,它使用terminfo查找的组合,或者对修改过的按键进行扩展的类模型的硬编码知识xterm,因此它可以理解诸如 之类的东西Ctrl-Up,而这是常规的诅咒/等等......不能。

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");
}
于 2012-08-20T10:40:10.813 回答
0

好的,因为我得到了使用 [n]curses 库的最佳方法。它是读取 terminfo (termcap) 数据库并确定您获得的平均转义序列取决于终端类型。没有必要使用它的终端图形功能。要使用 curses 获得正确的转义序列,您可以执行以下操作: 此外,可能通过读取应用程序中的 terminfo 数据库手动完成。 newterm(NULL, stdout, stdin);
raw();
noecho();
keypad();
ch = getch();
if (ch == KEY_F(2)) printf("Got F2");
endwin();

于 2012-08-19T22:56:24.767 回答