【问题标题】:How to make an interactive promp with arrow key functionality?如何使用箭头键功能制作交互式提示?
【发布时间】:2011-08-31 03:13:10
【问题描述】:
我正在制作一种解释性语言。我使用交互式提示输入要评估的表达式(REPL)。我想知道,如何实现标准提示行为?就像按上下箭头键导航命令历史,按左右箭头键移动文本光标,而不是打印 ^[[D^[[C^[[A^[[B 代码。我只是不知道如何捕捉它们,或者一般的控制字符。
我在 Linux 上。我需要使用 ncurses 或一些外部库,还是可以使用内置函数来完成?这与我的语言无关,但它让我发疯地使用这样的提示,没有导航。它使测试变得更加困难。
【问题讨论】:
标签:
input
keyboard
command-prompt
ncurses
read-eval-print-loop
【解决方案1】:
这是一个示例 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。