相关疑难解决方法(0)

使用GNU Readline; 如何在同一个程序中添加ncurses?

标题比我的实际目标更具体:

我有一个命令行程序,它使用GNU Readline,主要用于命令历史记录(即使用向上箭头检索以前的命令)和其他一些细节.现在,程序的输出中间散布着用户的输入,有时候输出是正常的,但输出是异步的(它是通过网络连接来响应输入命令),有时会变得烦人(例如,如果用户输出行时)正在输入新的输入).

我想为这个程序添加一个功能:输出的单独"窗口".我想过为此使用ncurses.但是从ncurses FAQ中可以看出,这两个库并不容易一起使用.

我可能会考虑使用Editlinetecla而不是Readline,但我不清楚其中任何一个是否能解决我的问题.我还考虑使用除ncurses之外的其他东西,包括提供两种功能的库(文本模式窗口和命令历史记录),但我不知道什么是最好的.

哦,对彩色文字的支持可能会得到奖励积分.我怀疑我可能能够做到这一点与Readline库,所以也许这是一个单独的问题,但如果我的问题的解决方案也可以轻松一点颜色添加到输出,那就更好了.

我正在使用Ubuntu Hardy(Linux 2.6).

ncurses readline editline

22
推荐指数
3
解决办法
6711
查看次数

行首有输出时的“readline”

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)

c readline libreadline

6
推荐指数
1
解决办法
623
查看次数

标签 统计

readline ×2

c ×1

editline ×1

libreadline ×1

ncurses ×1