3

例如,假设我有字符串“Hinge” - 我希望能够将光标移动到开头,按 del 删除“H”,然后插入“B”,将光标前面的所有内容向前推,然后创建单词“Binge”,而不是覆盖默认行为“i”。我可以使用标准的 addch() 函数来做到这一点吗?

此外,即使我可以让它在屏幕上正确打印,让它与缓冲区相对应似乎是一个过于复杂的问题。这似乎是一项常见的任务,但我想不出一种非 hacky 的方式来做到这一点。

这是我当前如何处理基本输入的示例。

  if (isprint(key)) {
    if (ctx->pos != sizeof(ctx->line)-1) {
      mvwaddch(self->window, y, x, key);
      ctx->line[ctx->pos++] = key;
      ctx->line[ctx->pos] = '\0';
    }
  }
4

1 回答 1

1

您可以使用GNU readline 库来完成此操作,而不是直接对 curses 进行编码。这是一个简单的程序:

#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>

int main () {
    char *s = readline("Type something: ");
    printf("You typed: %s\n", s);
    return 0;
}

在我的系统上,我用gcc prog.c -lreadline -ltermcap

于 2013-08-14T00:45:04.487 回答