C++ Linux-移动控制台光标
我目前正在为linux设计一个CLI界面,由于各种原因,我无法使用ncurses。我只使用C++和QT框架。 因此,为了有一个用户友好的界面,我必须在一个单独的线程中运行这个getch循环: 这基本上意味着我必须自己实现所有基本功能(比如backspace)。我已经实现了命令完成和命令历史记录(比如在linux中按tab或uparrow/downarrow),但我不知道如何实现leftarrow/rightarrow(也就是通过typeahead进行搜索) 通常,我是这样实现的:在每个不等于-1的gech上,我检查用户是否按下了一个特殊的键(一个以某种方式修改typeahead的键)。然后,我使用以下函数清除标准输出:C++ Linux-移动控制台光标,c++,linux,qt,command-line-interface,termios,C++,Linux,Qt,Command Line Interface,Termios,我目前正在为linux设计一个CLI界面,由于各种原因,我无法使用ncurses。我只使用C++和QT框架。 因此,为了有一个用户友好的界面,我必须在一个单独的线程中运行这个getch循环: 这基本上意味着我必须自己实现所有基本功能(比如backspace)。我已经实现了命令完成和命令历史记录(比如在linux中按tab或uparrow/downarrow),但我不知道如何实现leftarrow/rightarrow(也就是通过typeahead进行搜索) 通常,我是这样实现的:在每个不等于-
void inputobject::clear_line(int nletters)
{
QTextStream(stdout) << "\033[2K";
for(int i = 0; i < nletters;i++){
QTextStream(stdout) << "\b";
}
rewind(stdout);
}
void inputobject::clear_行(int-nletters)
{
QTextStream(stdout)不使用ncurses和co是一个严重的限制
在shell上进行正确的输入/输出以显示任何内容是非常困难的
我想到的唯一其他真正的解决方案(我不能认为是重新实现类似于ncurse的库的解决方案)是:
- 调用dialog(例如www.linuxjournal.com/article/2807和文档:)
- 将帧缓冲区机制与Qt4()一起使用
答案在Evilluff的评论中给出:
ANSI转义序列允许您在屏幕上随意移动光标。这对于由shell脚本生成的全屏用户界面更有用,但也可以用于提示。移动转义序列如下所示:
- 定位光标:
\033[;H
或
\033[L;Cf
将光标放在L行和C列
- 将光标向上移动N行:
\033[NA
- 将光标向下移动N行:
\033[NB
- 将光标向前移动N列:
\033[NC
- 将光标向后移动N列:
\033[ND
- 清除屏幕,移动到(0,0):
\033[2J
- 删除到行尾:
\033[K
- 保存光标位置:
\033[s]
- 恢复光标位置:
\033[u
您是否考虑过查看ncurses
源代码以了解它是如何实现的?您不是在寻找吗?不鼓励只使用链接的答案,因为链接可能会消亡。如果您想将Evilluff的评论作为一个答案进行推广,您应该包括链接中所需的一切,以使其独立。