终端程序如何向屏幕添加滚动?

2 bash shell terminal less-unix

程序 less、more 或 vi 是如何在终端屏幕上添加滚动部分而不清除屏幕的,之后它是如何消失的?

如果我从脚本或脚本退出的方式运行它,有没有办法在特定的时间内运行更少?

Kei*_*son 6

首先,这与 bash 或您使用的任何 shell 无关。该less命令本身处理它的屏幕更新; 它可以从任何 shell 或任何其他程序运行。

您的终端模拟器支持转义序列。写入可打印的字符(字母、数字等)会导致显示这些字符。编写转义序列会导致其他各种事情发生:移动光标、清除当前行、清除屏幕等。

termcapterminfocursesncurses软件包提供访问这些转义序列。less, vim, emacs, 通常用于ncurses帮助管理屏幕。

有关你的问题的两个序列被称为tite通过的termcap,smcuprmcup通过terminfo的。该smcup序列使终端保存其当前状态(屏幕上显示的所有内容以及光标位置),然后切换到从空开始的辅助显示缓冲区。该rmcup序列恢复保存的状态并返回到主显示缓冲区。ncurses默认情况下,使用的程序将smcup在进入时打印序列并rmcup在退出时打印条目。这就是此类程序在终止时能够将您的终端窗口恢复到其先前状态的方式。

如果我从脚本或脚本退出的方式运行它,还有没有办法在特定的时间内运行更少

我不认为有一个很好的方法来做到这一点。less是一个交互式程序;它通常仅在用户键入q或类似内容时终止。在特定时间内运行它与它的设计目的背道而驰,作为用户,如果less在我使用它时被终止,我会很生气。

可以使用该timeout命令,但这会干扰smcup/rmcup机制,从而导致显示可能已损坏。可能有更好的方法来完成您正在尝试做的事情。