Terminal 确定独立于终端类型的转义序列

Terminal 确定独立于终端类型的转义序列,terminal,ansi-escape,Terminal,Ansi Escape,我的应用程序在原始模式下从终端读取转义序列。当它在xterm上运行时,我得到了类似“\eOQ”的F2。但是当它在linux tty终端上运行时(通过Ctrl-Alt-F1切换),我得到了“\e[[B”。 确定F2独立于运行在其上的终端类型应用程序的正确方法是什么?好的,因为我得到了使用[n]curses库的最佳方法。它是读取terminfo(termcap)数据库,并确定根据终端类型得到的平均转义序列。 无需使用其终端图形功能。要使用诅咒获得正确的转义序列,可以执行以下操作: newterm(

我的应用程序在原始模式下从终端读取转义序列。当它在xterm上运行时,我得到了类似“\eOQ”的F2。但是当它在linux tty终端上运行时(通过Ctrl-Alt-F1切换),我得到了“\e[[B”。

确定F2独立于运行在其上的终端类型应用程序的正确方法是什么?

好的,因为我得到了使用[n]curses库的最佳方法。它是读取terminfo(termcap)数据库,并确定根据终端类型得到的平均转义序列。 无需使用其终端图形功能。要使用诅咒获得正确的转义序列,可以执行以下操作:

newterm(NULL,stdout,stdin);
原始();
noecho();
键盘();
ch=getch();
如果(ch==KEY_F(2))printf(“Got F2”);
endwin();

另外,它可能是通过读取应用程序中的terminfo数据库来手动完成的。

如果你想阅读终端按键,你可能想看看这样的东西,它将一般问题抽象出来。在内部,它使用
terminfo
查找的组合,或者扩展
xte的硬编码知识rm
-类似于用于修改按键的模型,因此它可以理解像Ctrl-Up这样的东西,而常规的诅咒/etc…无法理解

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");
}

是否可以用下一种方式使用它:如果按下F1-F9键中的一个,那么我会得到一个常数或类似于你的例子中的某个值。但是如果按下任何其他非字母数字键,例如F10-F12,我会得到它的转义序列?否;
libtermkey
的全部目的是提取出那些原始转义序列,并为你提供数据结构ctures(即
TermKeyKey
结构)表示按键。这个新的结构没有序列,它是在那里产生的?也许不难修补它以包含这些数据?你可以很容易地重新创建一个转义序列,但是原始的输入数据现在已经丢失了。你能解释一下我如何重新创建转义序列吗?