我试图模拟一个用户,按下<Left Arrow>
, <Backspace>
, <Delete>
等特殊键。我听说诅咒/terminfo可能有助于以终端不确定的方式做到这一点,但是当我尝试(使用以下代码)打印第一个字符串"文本"然后发出key_left
序列时,我没有得到一个(以'|'
作为光标)"tex|t"
,而是"textD|"
。为什么?如何正确地做到这一点?
#include <term.h>
#include <stdio.h>
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;
}
请注意,虽然我可以使用诅咒,但在我的用例中,护士是不可接受的。另外,请注意,我不想使用initscr()
之类的东西,将当前终端屏幕替换为空白屏幕,这不是期望的行为。
负责光标移动的转义序列和与箭头键相关的转义序列通常是不同的,不应该相互代替使用。在terminfo
数据库中,前者以cursor
为前缀,后者以key
为前缀。
因此,要将光标向左移动,应该使用putp (cursor_left)
,而不是putp (key_left)
。