【问题标题】:How does terminal programs add scrolling to the screen?终端程序如何向屏幕添加滚动?
【发布时间】:2014-04-27 13:59:33
【问题描述】:

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

如果我是从脚本运行它或脚本退出的方式,有什么方法可以减少特定时间的运行?

【问题讨论】:

    标签: bash shell terminal less-unix


    【解决方案1】:

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

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

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

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

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

    我认为没有真正好的方法可以做到这一点。 less 是一个互动程序;它通常仅在用户键入 q 或类似内容时终止。在特定时间内运行它违背了它的设计目的,作为用户,如果less 在我使用它时被终止,我会很生气。

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

    【讨论】:

    • 我只是想显示一条实时更新的消息,这样我就不想每秒刷新一次了。不过现在没关系,因为 smcup 和 rmcup 可以很好地配合我想做的事情我在他们身上发现的 tput 命令真的很有用。感谢您的帮助。
    • @Jidder:那么你应该问一下你真正想要做什么;见XY problemwatch 命令可能就是你要找的。​​span>
    • 我问我想知道什么。我意识到它看起来像我没有。除了我最初显示更新消息的问题外,我还(比消息更重要)想知道更少和类似的命令是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2020-06-01
    • 2013-04-01
    • 1970-01-01
    相关资源
    最近更新 更多