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

时间:2014-03-20 15:33:50

标签: bash shell less-unix

程序如何更少,更多或vi在终端屏幕上添加滚动部分而不清除屏幕以及之后它如何消失?

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

1 个答案:

答案 0 :(得分:4)

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

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

termcapterminfo以及cursesncurses软件包提供对这些转义序列的访问权限。 lessvimemacs,通常使用ncurses来帮助管理屏幕。

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

  

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

我认为没有一个非常好的方法可以做到这一点。 less是一个互动节目;它通常仅在用户键入q或类似内容时终止。在特定时间内运行它与其设计目的相反,作为用户,如果less在我使用时被终止,我会感到恼火。

可以使用timeout命令,但这会干扰smcup / rmcup机制,从而使您显示可能已损坏的内容。可能有更好的方法来完成你想要做的事情。