1

我正在尝试模拟用户,按下 、 等特殊<Left Arrow>键。我听说 curses/terminfo 可能有助于以与终端无关的方式做到这一点,但是当我尝试(使用以下代码)打印第一个字符串“text”然后发出一个序列时,我没有得到一个(with as cursor),而是。为什么?如何正确地做到这一点?<Backspace><Delete>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;
}

请注意,虽然我可以使用 curses,但 ncurses 在我的用例中是不可接受的。另外,请注意,我不想使用类似的东西initscr(),将当前终端屏幕替换为空白屏幕,这不是所需的行为。

4

1 回答 1

1

负责光标移动的转义序列和与箭头键关联的转义序列通常是不同的,不应相互替代使用。在terminfo数据库中,前者以 . 为前缀,cursor后者以key.

因此,要将光标向左移动,应该使用putp (cursor_left),而不是putp (key_left)

于 2013-03-31T12:37:58.017 回答