ZSH“粘性”提示

4
我在我的.zsh-theme文件中使用RPROMPT='$(vbox_status)'来输出Vagrant/VBox虚拟机的状态(其中vbox_status调用脚本以输出正在运行的内容),效果如下图所示:ZSH theme 然而,我想知道是否有一种方法可以使其“粘性”,即它不是在每一个单独的行末输出,而是停留在箭头所示的位置,并且每当新的行在上面输出时就会更新自己。
例如:enter image description here

1
你不需要(或者真的不想)在提示符中这样做。在zsh中,可以查看函数preexecprecmd。对于bash,请查看PROMPT_COMMAND并设置DEBUG trap - William Pursell
1个回答

3
您可以使用一个名为 tput 的命令来完成此操作。
我已经编写了一个基本脚本,该脚本将字符串放在屏幕的角落,可以帮助您入门。您可以通过清除内容、高亮显示或其他方式使其更加美观,但这是一个起点:
#!/bin/bash
screen_w=$(tput cols)   # Get screen width.
screen_h=$(tput lines)  # Get screen height.
str=$*                  # String to put in corner.
string_w=${#str}
let "x = $screen_w - $string_w"

tput sc               # Save current position
tput cup $screen_h $x # Move to corner
echo -ne $str         # Put string in the corner
tput rc               # Go back to saved position.
echo " >"             # Some kind of prompt

所以您可以将提示符设置为像这样运行(我将上面的脚本称为pr.sh)
PS1=$(pr.sh $(date))

zsh 中可能会有所不同,但我相信你可以解决这个问题。 只需将 $(date) 部分更改为您的状态命令即可(pr.sh 必须位于您的路径上)。

这有点笨拙,但它将帮助您入门。tput 几乎可以无限制地使用!


太棒了,这就解决了问题!我已经更新了我的Gist,展示了完整的ZSH解决方案:https://gist.github.com/grega/61355d041ccfaef66419 - Greg Annandale
感谢这个有趣的问题。 - John C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接