如何使用箭头键功能进行交互式提示?

时间:2011-08-31 03:13:10

标签: input keyboard command-prompt ncurses read-eval-print-loop

我正在制作一种解释性语言。我使用交互式提示输入我要输入的表达式(REPL)。我想知道,我如何实现标准的提示行为?就像按向上和向下箭头键导航命令历史记录一样,按左右箭头键移动文本光标,而不是打印^ [[D ^ [[C ^ [[A ^ [[B code。我只是不知道如何捕捉它们,或者一般的任何控制角色。

我在Linux上。我是否需要使用ncurses或一些外部库,还是可以使用内置函数?这无关我的语言,但它使我疯狂使用这样的提示,没有导航。它使测试更加困难。

1 个答案:

答案 0 :(得分:2)

以下是一个示例C程序,它允许您使用readline执行此操作(必须使用-lncurses -lreadline编译):

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

int main (void) {
    char *input = readline("$ ");
    printf("You typed `%s'!\n", input);
    return 0;
}

基本上,它模仿了home / end和方向箭头键等元键的命令行行为。但这完全取决于您是否正确配置了inputrc。