2014-06-17 84 views
2

我有我的ZSH主題我.zsh主題文件中使用RPROMPT='$(vbox_status)'輸出我的流浪/垂直框虛擬機的狀態(其中vbox_status電話a script which outputs what's running),像這樣:ZSH「粘住」提示

ZSH theme

然而,我想知道是否有辦法讓這個輸出變得「粘性」,這樣,而不是在每一行的末尾輸出,它將停留在箭頭所指示的位置,只要更新一行就更新自己在上面輸出。

例如。

enter image description here

+1

你不需要(或真的想)在提示符下執行此操作。在zsh中,查看函數'preexec'和'precmd'。對於bash,請查看PROMPT_COMMAND並設置DEBUG陷阱。 –

回答

2

你可以用一個命令來完成這一名爲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不同,但我相信你可以將這部分工作。 只需將$(日期)部分更改爲狀態命令即可。 (pr.sh必須在你的道路上)

這有點笨重,但它會讓你開始。 tput可以做什麼幾乎沒有限制!

+0

輝煌,那就是訣竅!我已經更新了我的要點,以便用ZSH顯示完整的解決方案:https://gist.github.com/grega/61355d041ccfaef66419 –

+0

沒有運行虛擬機的示例:https://www.evernote.com/shard/s153/sh/ 6bc2d85e-d9b7-4a69-8cf5-b831b0bd90ec/680ec902d7d540f94ace5aff5d80f6f6/res/5b3085c0-f003-4d26-ac9c-2fbe4d4ecccf/skitch.png?resizeSmall&width = 832 –

+0

運行1個虛擬機的示例:https://www.evernote.com/shard/ s153/sh/cf208c18-9d87-47d0-afb2-4b19c28662b8/8758ef7286dfc035381ab1e2f5d3c28f/res/8a47b88d-cb78-4519-9857-040a7c93e91c/skitch.png?resizeSmall&width = 832 –