首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux -移动控制台游标可视化

Linux -移动控制台游标可视化
EN

Stack Overflow用户
提问于 2016-08-04 15:03:24
回答 2查看 11.5K关注 0票数 10

我目前正在为linux设计一个CLI接口,由于各种原因,我无法使用ncures。我只使用C++和Qt框架。

因此,为了具有一个用户友好的界面,我必须在一个单独的线程中运行这个getch循环:

https://stackoverflow.com/a/912796/3605689

这基本上意味着我必须自己实现所有的基本功能(比如后台空间)。我已经实现了命令完成和命令历史记录(就像在linux中按tab键或uparrow/ when箭头时),但是我不知道如何实现左尾/右箭头(也就是通过typeahead查找)。

通常,我是这样实现的:在每个不等于-1的gech上,我检查用户是否按了一个特殊的键(一个以某种方式修改了打字机的键)。然后使用以下函数清除stdout:

代码语言:javascript
运行
复制
void inputobject::clear_line(int nletters)
{
    QTextStream(stdout) << "\033[2K";

    for(int i = 0; i < nletters;i++){
        QTextStream(stdout) << "\b";
    }

    rewind(stdout);
}

代之以其他的东西,有效地模拟预先输入。例如,在backspace的情况下,我将保存命令调用clear_line,然后再次输出命令,只需少写一个字母,就像正常的控制台应用程序那样。

我真正的问题是光标,在左/右的情况下,我需要将光标移动到可视的位置,以便能够指示文本中的用户正在寻找的位置:

由于我是如何重写给定的stdout行来模拟打字机的,所以只要光标停留在同一条线上,光标在哪里并不重要--重要的是视觉上的问题。如何在linux上实现移动光标的可视化?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-08 10:58:30

在Evilruff的评论中提供了答案:

光标运动

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
票数 20
EN

Stack Overflow用户

发布于 2016-08-04 15:33:31

不使用ncurses和co是一个严重的限制。

在shell上进行正确的输入/输出以显示任何内容是非常困难的。

我想到的唯一其他真正的解决方案(我不能认为是重新实现一个类似于ncurse的库的解决方案)是:

  • 调用对话框(例如,www.linuxJournal.com/ some /2807和doc:http://linux.die.net/man/1/dialog)
  • 在Qt4 (这里)中使用框架缓冲机制
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38770996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档