如何正确打印与terminfo的特殊按键序列终端无关的方式吗?(How to properly pr

2019-10-17 22:14发布

我试图仿效用户,按这样的特殊键如<Left Arrow><Backspace><Delete>等。 听说诅咒/ terminfo的可能帮助做,在终端无关的方式,但是当我尝试(与下面的代码)打印第一个字符串“文本”,然后emmit一个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;
}

请注意,当我没关系使用诅咒,ncurses的是在我的使用情况是不可接受的。 另外请注意,我不想使用像initscr()用空白的一个替代目前的终端屏幕,它不是一个期望的行为。

Answer 1:

逸出负责的光标移动序列和与逃生箭头键相关序列,通常是不同的并且不应当被用来代替彼此。 在terminfo数据库,前者是前缀cursor后面提到的key

因此,将光标移动到左侧,应该使用putp (cursor_left)putp (key_left)



文章来源: How to properly print special key sequences with terminfo in terminal-agnostic way?