8

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

4

9 回答 9

6

Depending on the terminal you send control seuqences. Common sequences are for example esc[;H to send the cursor to a specific position (e.g. on Ansi, Xterm, Linux, VT100). However, this will vary with the type or terminal the user has ... curses (in conjunction with the terminfo files) will wrap that information for you.

于 2010-02-08T15:22:10.200 回答
5

试试这个 shellscript

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

-n 选项可防止换行...而 \r 是否回车...您一次又一次地写入同一行 - 没有滚动或类似的东西

于 2008-09-16T22:40:04.043 回答
4

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

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

于 2008-09-16T22:37:57.620 回答
4

许多应用程序使用curses库,或一些绑定到它的语言。

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

于 2008-09-16T22:41:08.907 回答
2

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

这里有一个清单。注意“移动光标的东西”行。

于 2008-09-16T22:35:37.470 回答
1

下士 Touchy 已经回答了这是如何在最低级别完成的。为了更容易开发,curses 库提供了比简单地将字符发送到终端更高级别的控制。

于 2008-09-16T22:40:20.970 回答
1

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

于 2008-09-16T22:41:14.570 回答
0

为了建立@Corporal Touchy 的答案,有一些库可以为您处理其中的一些功能,例如curses/ncurses

于 2008-09-16T22:38:52.983 回答
0

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

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

于 2008-09-16T22:44:56.543 回答