我目前正在为Linux设计一个CLI界面,由于各种原因,我无法使用ncurses。我完全使用C++和Qt框架。
因此,为了拥有用户友好的界面,我必须在单独的线程中运行此getch循环:
https://dev59.com/MnRC5IYBdhLWcg3wD83r#912796
这基本上意味着我必须自己实现所有基本功能(例如退格),我已经实现了命令完成和命令历史记录(就像在Linux中按tab或uparrow / downarrow时) ,但我无法弄清楚如何实现左箭头/右箭头(即在输入时查找)。
通常,我会这样实现:每次不等于-1的getch时,我都会检查用户是否按下了特殊键(修改输入的某个键)。然后,我使用以下函数清除stdout:
void inputobject::clear_line(int nletters)
{
QTextStream(stdout) << "\033[2K";
for(int i = 0; i < nletters;i++){
QTextStream(stdout) << "\b";
}
rewind(stdout);
}
我需要将其替换为其他内容,有效地模拟类型提醒。例如,在退格键的情况下,我将保存命令调用clear_line
,然后再次打印命令,只减少一个字母,就像正常的控制台应用程序一样。
我的实际问题在于光标,在左/右箭头的情况下,我需要移动光标以示出用户正在查找文本的位置:
由于我重写给定的stdout行以模拟类型提示的方式的性质,真正的光标位置并不重要,只要它停留在同一行上 - 只有视觉效果才重要。如何在Linux上实现移动光标视觉效果?
ncurses
源代码来看它是如何实现的吗? - Jesper Juhl