如何使用terminfo以终端无关的方式正确打印特殊键序列?
我试图模仿用户,按下 ,
,
等特殊键。 我听说curses / terminfo可能有助于以终端无关的方式做到这一点,但是当我尝试(使用以下代码)打印第一个字符串“text”然后发出
key_left
序列时,我没有得到(带有'|'
作为光标) "tex|t"
,而是"textD|"
。 为什么? 怎么做得好?
#include #include static void putf(const char *name) { putp(name); fflush(stdout); } int main(int argc, char **argv) { setupterm((char*)0, 1, (int*)0); printf("text"); fflush(stdout); putf(key_left); // hang up until user input fgetc(stdin); return 0; }
请注意,虽然我可以使用curses,但在我的用例中,ncurses是不可接受的。 另外,请注意我不想使用像initscr()
这样的东西,用空白替换当前的终端屏幕,这不是一个理想的行为。
负责光标移动的转义序列和与箭头键相关联的转义序列通常是不同的,不应相互使用。 在terminfo
数据库中,前者以cursor
为前缀,后者以key
为前缀。
因此,要将光标向左移动,应使用putp (cursor_left)
,而不是putp (key_left)
。