我在readline
自己的程序中使用(版本 6.3,默认 [非 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> ");
}
所以这条线看起来像:
Hello OK> <caret here>
如果您键入少量字符(最多 5 个?)然后,说,Ctrl+U
(可能是其他人)删除您的输入,到目前为止一切似乎都很好 ---readline()
将插入符号移回到它自己的提示之后,即删除5 个字符。但是,尝试输入,说:
123456 <Ctrl+U>
现在它删除回,只Hello
留下Hell
一行,然后是插入符号,即删除 6+6==12。所以你看:
Hello OK> 123456 <Ctrl+U>
Hell<caret here>
我需要两种可能的解决方案之一:
我已经意识到这取决于在出错的行上输入了多少个字符。任何修复/解决方法?
或者,是否有一个
readline
库调用可以告诉我插入符号在我调用之前的位置/列readline()
?然后至少我可以认识到我在现有行的末尾并输出 a\n
以便首先将自己定位在新行的开头。
我想我可以猜测,对于最多输入 5 个字符,它最多可以使用 5 个退格键,但是如果它不是从行首开始,它会选择做其他事情,这会造成混乱吗?
我看到GNU Readline:如何清除输入行?. 这是同样的情况吗?解决方案似乎相当复杂。开始时不能问你在哪一列readline()
,或者告诉它不要试图在删除时那么聪明,只删除实际输入的字符?