在终端重画屏幕

时间:2020-03-05 18:57:24  来源:igfitidea点击:

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

解决方案

回答

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

这里有一个清单。注意"将光标移动到某物"行。

回答

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

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

回答

要以@Corporal Touchy的答案为基础,有可用的库可以为我们处理一些此功能,例如curses / ncurses

回答

试试这个shellscript

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

-n选项可防止换行...而\ r会导致回车...我们一次又一次地写到同一行中,没有出现任何乱码现象

回答

下士已经回答了如何在最低级别上做到这一点。为了简化开发,curses库提供了更高的控制级别,而不是简单地将字符发送到终端。

回答

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

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

回答

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

回答

我同意danio的观点,ncurses是必经之路。这是一个很好的教程:

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

回答

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