修改终端中已有的文本

Dea*_*ean 3 c linux curses terminal console-application

有没有办法修改终端中已有的文本,但与简单的进度条清除不同\r,通过完全修改文本

例如

user@machine$ grep -R 'mystuff' .
result1
result2
result3
user@machine$ 
Run Code Online (Sandbox Code Playgroud)

使用箭头来例如移动“虚拟”光标(|)

user@machine$ grep -R 'mystuff' .
|result1
result2
result3
user@machine$ 
Run Code Online (Sandbox Code Playgroud)

最重要的是,清除终端?

不,它不是在终端修改文本的副本,因为它要求进行不同类型的文本操作,而另一个问题的描述则专门要求提供进度条示例。

chq*_*lie 5

您可以使用转义序列在 linux 终端上执行各种操作。您可以从以下参考资料中了解这一点:

直接使用转义序列控制终端是非常棘手的,因为您必须处理各种边界情况和副作用,具体取决于终端的实际内容和您在其上显示的文本类型(ASCII、UTF-8 或其他奇异的变种...)

您的用例使它变得更加困难,因为您必须首先确定由不相关的命令(例如 )生成的终端的内容grep,还取决于终端的特定宽度和高度、shell 提示等。

作为qemacs的共同作者和维护者,我可以告诉您让进程缓冲区正确运行,以透明的方式处理 shell 和程序输出以及用户输入,同时所有这些内容都可以在编辑器的缓冲区和窗口中自由编辑。如果您不胆怯,可以查看源文件tty.cshell.c

因此,我敦促您从不同的角度重新考虑您的问题:

  • 你想达到什么目的?
  • 您可以通过过滤命令的输出来实现吗?
  • 您可以通过创建 shell 别名或 shell 脚本来对命令的输出进行后期处理吗?
  • 您可以使用 emacs、qemacs 或其他一些支持 shell 的 IDE 来实现所需的功能吗?