标题比我的实际目标更具体:
我有一个命令行程序,它使用GNU Readline,主要用于命令历史记录(即使用向上箭头检索以前的命令)和其他一些细节.现在,程序的输出中间散布着用户的输入,有时候输出是正常的,但输出是异步的(它是通过网络连接来响应输入命令),有时会变得烦人(例如,如果用户输出行时)正在输入新的输入).
我想为这个程序添加一个功能:输出的单独"窗口".我想过为此使用ncurses.但是从ncurses FAQ中可以看出,这两个库并不容易一起使用.
我可能会考虑使用Editline或tecla而不是Readline,但我不清楚其中任何一个是否能解决我的问题.我还考虑使用除ncurses之外的其他东西,包括提供两种功能的库(文本模式窗口和命令历史记录),但我不知道什么是最好的.
哦,对彩色文字的支持可能会得到奖励积分.我怀疑我可能能够做到这一点与Readline库,所以也许这是一个单独的问题,但如果我的问题的解决方案也可以轻松一点颜色添加到输出,那就更好了.
我正在使用Ubuntu Hardy(Linux 2.6).
我readline在我自己的程序中使用(版本 6.3,默认 [non-vi] 模式,Ubuntu 14.04)库,在终端窗口(在 PC 上)中运行。当readline()调用时没有由换行符终止的先前输出时会出现问题。
#include <stdio.h>
#include <readline/readline.h>
void main(void)
{
// Previous output from some other part of application
// which *may* have output stuff *not* terminated with a '\n'
printf("Hello ");
fflush(stdout);
char *in = readline("OK> ");
}
Run Code Online (Sandbox Code Playgroud)
所以这条线看起来像:
Hello OK> <caret here>
Run Code Online (Sandbox Code Playgroud)
如果您键入少量字符(最多 5 个?),然后说Ctrl+U(可能是其他字符)删除您的输入,到目前为止一切似乎都很好 ---readline()将插入符号移回到它自己的提示之后,即删除5 个字符。但是,请尝试输入,例如:
123456 <Ctrl+U>
Run Code Online (Sandbox Code Playgroud)
现在,它会删除回进了Hello,只留下Hell就行了,然后插入符号,即删除6 + 6 = = 12。所以你看:
Hello OK> 123456 <Ctrl+U>
Hell<caret …Run Code Online (Sandbox Code Playgroud)