某些程序如何编辑终端上显示的内容(随机选择一个例子,程序“sl”)?我在这里考虑的是 Linux 终端,它也可能发生在其他操作系统中,我不知道。我一直认为一旦显示一些文本,它就会保留在那里。如何在不重新绘制整个屏幕的情况下更改它?

有帮助吗?

解决方案

许多应用程序都使用 咒骂 库,或与其绑定的某种语言。

对于单行重写,例如更新进度信息,特殊字符“回车”,通常由转义序列“ ”指定,可以将光标返回到当前行的开头,从而允许后续输出覆盖之前写入的内容。

其他提示

根据您发送控制序列的终端。常见的序列例如 esc[;H 将光标发送到特定位置(例如在 Ansi、Xterm、Linux、VT100 上)。但是,这会根据用户拥有的类型或终端而有所不同......curses(与 terminfo 文件一起)将为您包装该信息。

试试这个shell脚本

#!/bin/bash
i=1
while [ true ]
    do
            echo -e -n "\r $i"
            i=$((i+1))
    done

-n 选项防止换行符... 表示回车...你一次又一次地在同一行中写入 - 没有滚动或其他什么

如果使用回车符(' ')而不是换行符(' ')终止发送到终端的行,它将把光标移动到当前行的开头,允许程序打印更多文本超出了之前打印的内容。我偶尔会用它来显示长任务的进度消息。

如果您需要进行更多的终端编辑,请使用 恩诅咒 或其变体。

可以发送到终端的字符将光标向后移动。然后可以覆盖文本。

有一个清单 这里. 。请注意“将光标移至某处”行。

NCurses 是一个跨平台库,可让您在智能终端上绘制用户界面。

塔奇下士回答了最低级别是如何做到这一点的。为了更容易开发 诅咒库 比简单地向终端发送字符提供更高级别的控制。

为了以@Corporal Touchy的答案为基础,有一些可用的库可以为您处理其中一些功能,例如 诅咒/ncurses

我同意 danio 的观点,ncurses 是正确的选择。这是一个很好的教程:

http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top