在终端中重新绘制屏幕

9

一些程序如何编辑终端上显示的内容(随机举个例子,比如 'sl' 程序)?我指的是 Linux 终端,其他操作系统可能也有类似情况,但我不确定。 我一直以为一旦显示了某段文本,它就一直停留在那里。那么如何在不重新绘制整个屏幕的情况下更改它呢?

9个回答

6

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


5

试试这个shell脚本

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

-n选项可以防止换行...而\r则是回车...你可以在同一行中反复写入 - 不需要滚动或其他任何操作。

5
许多应用程序使用curses库,或者其语言绑定。
对于单行重写,例如更新进度信息,特殊字符“回车符”,通常由转义序列“\r”指定,可以将光标返回到当前行的开头,允许后续输出覆盖先前写入的内容。

4
如果你使用回车符('\r')而不是换行符('\n')来终止发送到终端的行,它会将光标移动到当前行的开头,从而允许程序在之前打印的文本上面打印更多的文本。我偶尔会用这种方式来显示长时间任务的进度信息。
如果你需要进行更多的终端编辑操作,可以使用ncurses或其变体。

2

有些字符可以发送到终端,将光标移回,然后可以覆盖文本。

这里有一个列表(链接)。请注意“移动光标”的行。


现在我明白为什么在catless中查看二进制文件会破坏我的终端了...它总是会更改字符集,我不得不重新启动,哈哈。 - krs013

1

Touchy下士已经回答了如何在最低层面上完成此操作。为了更轻松的开发,curses库提供了比仅向终端发送字符更高级别的控制。


1

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


0

在@Corporal Touchy的回答基础上,有一些可用的库可以为您处理一些功能,例如curses/ncurses


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接