【问题标题】:Fixed line on top of zsh in terminal终端中 zsh 顶部的固定行
【发布时间】:2014-12-12 11:06:42
【问题描述】:

我正在尝试查找是否可以使用 zsh 在终端顶部放置一条固定线路(以及如何做,如果是的话)。我想在这一行中加入一些系统信息(例如 cpu 使用情况、磁盘可用空间、ram 使用情况等),以保留经典的“滚动行为”。

我会在桌面的窗口终端中使用它。

任何想法/建议都会非常感激,谢谢!

【问题讨论】:

    标签: plugins terminal window zsh oh-my-zsh


    【解决方案1】:

    我建议不要尝试在 zsh 中执行此操作,而是使用 tmux。如果您在~/tmux.conf 中设置以下内容,它应该会产生预期的效果:

    set -g status-position top
    set -g status-right '#(system-information-command)'
    set -g status-intervall 10
    

    它将在顶部放置一个状态栏,在其中打印system-information-command 输出的第一行,并每10秒更新一次。

    推理:

    虽然从zsh 中在终端的第一行打印某些内容很容易,并且 - 如果需要 - 不断更新它并没有那么难,但保持滚动行为将非常困难,如果不是不可能的话zsh.

    原因是回滚缓冲区由终端维护,而不是由zsh。到终端的任何输出都在光标的当前位置完成。如果在光标位置或之后已经打印了任何内容,它将被覆盖。没有办法插入任何东西。

    除非光标被显式设置到某个位置,否则它将位于最后一个输出的末尾,大部分时间是在终端的最底部。如前所述,将光标放在第一行,写一些东西并将其重置到之前的位置非常容易。 但是打印状态行之前第一行中的任何内容都将被覆盖。 zsh 只能写入终端,不能从之前的输出中读取。所以无论状态栏覆盖什么都无法恢复。

    如果您在终端中向上滚动,先前打印的状态行将与终端的其余内容一起向下移动。如果某个命令的输出高于终端,则至少会覆盖一行。

    tmux 是一个终端多路复用器。它本质上在您的终端内运行一个终端(或更多终端)。 zsh 并且在其中启动的任何程序都将在“内部”终端中运行。同时状态行将被打印到“外部”终端,并且不会干扰 shell 的输出。

    【讨论】:

    • 我让它工作但使用 tmux 我还有 2 个问题:1. 我无法再滚动终端 2. 当我清除我的控制台时,下一行写在或多或少 6 之后控制台顶部的行
    【解决方案2】:

    您可以滥用您的提示在屏幕顶部显示固定的行。它利用几个 ANSI 转义码来操纵光标的位置。

    • \e[s - 保存光标位置
    • \e[u - 恢复光标位置
    • \e[H - 将光标移动到屏幕的左上角

    请务必将任何此类转义序列以及顶行本身的文本包含在 %{ ... %} 中,以便 zsh 不会将它们计入提示的大小。

    PS1=$'%{\e[s\e[HTOPLINE\e[u%}%# '
    

    请注意,与bash 不同,zsh 不会在提示符中特别对待\e,因此请改用$'...' 样式的引用。如果您不能(或不想)使用它们,您可以尝试使用 Control-V Esc 键入文字转义字符(将显示为^[):

    PS1='^[[s^[[HTOPLINE^[[u%# '
    

    【讨论】:

    • 当我在 zsh 中导出这个 PS1 时,默认情况下它无法识别任何 ansi 转义字符。您还需要设置其他内容以使其正常工作吗?
    • 我原来的帖子忘记将 bash 样式的反斜杠转义更改为 zsh 样式的百分比转义,看起来我没有很好地解决这个问题。我稍后会尝试修复它。
    • 自发布此答案以来已经有几年了。自发布以来,有没有一种好方法可以在 ZSH 中固定“标题”或“状态栏”而不会滥用它?还是像其他答案建议的那样使用 TMUX 是最佳选择?
    • 至少在我看来,这与提示有很大关系,与其他提示组件或命令行工具结合使用可能会很脆弱。 tmux 还提供了很多除了持久状态栏之外的好处,所以无论如何我都建议查看tmux
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2020-10-13
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2018-09-20
    相关资源
    最近更新 更多