修改终端中已有的文本

问题描述 投票:3回答:2

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

EG

user@machine$ grep -R 'mystuff' .
result1
result2
result3
user@machine$ 

使用箭头例如移动一个'虚拟'光标(|)

user@machine$ grep -R 'mystuff' .
|result1
result2
result3
user@machine$ 

最重要的是,没有清理终端?

不,它不是Modifying text in the terminal的副本,因为它要求不同类型的文本操作,而另一个问题的描述特别要求进度条示例。

c linux terminal console-application curses
2个回答
4
投票

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

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

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

作为qemacs的共同作者和维护者,我可以告诉你,为了使进程缓冲区正常运行,以透明的方式处理shell和程序输出以及用户输入同时制作多少完整的噩梦所有这些内容都可以在编辑器的缓冲区和窗口中自由编辑。如果你不是胆小的话,你可以查看源文件tty.cshell.c

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

  • 你想要实现什么目标?
  • 你能通过过滤命令的输出来做到吗?
  • 你能通过创建shell别名或shell脚本来处理命令的输出吗?
  • 你可以使用emacs,qemacs或其他一些支持shell的IDE来实现所需的功能吗?

-1
投票

是的,您可以使用ANSI escape sequences在终端周围移动。

注意:如果启用了ANSI支持,也可以在Windows上运行。

© www.soinside.com 2019 - 2024. All rights reserved.