如何以终端不可知的方式正确打印带有termino的特殊键序列



我试图模拟一个用户,按下<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)

相关内容

  • 没有找到相关文章

最新更新