在终端重绘屏幕

时间:2008-09-16 22:34:03

标签: linux terminal

某些程序如何编辑终端上显示的内容(选择随机示例,程序'sl')?我在想这里的Linux终端,它也可能发生在其他操作系统中,我不知道。我一直以为一旦显示了一些文字,它就会留在那里。如何在不重绘整个屏幕的情况下进行更改?

9 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

试试这个shellcript

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

-n选项会阻止换行...并且\ r \ n会回滚...你会一次又一次地写入同一行 - 没有滚动或者什么都没有

答案 2 :(得分:4)

如果使用回车符('\ r')而不是换行符('\ n')终止发送到终端的行,它会将光标移动到当前行的开头,允许程序在之前打印的内容上打印更多文本。我偶尔会将此用于长期任务的进度消息。

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

答案 3 :(得分:4)

许多应用程序使用curses库或某种语言绑定它。

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

答案 4 :(得分:2)

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

有一个列表here。注意“移动光标”行。

答案 5 :(得分:1)

Corporal Touchy已经回答了如何在最低级别完成这项工作。为了便于开发,curses library提供了比简单地将字符发送到终端更高级别的控制。

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

我同意danio,ncurses是要走的路。这是一个很好的教程:

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