
我將終止子與 zsh 與抗原結合使用。我使用的主題(af-magic 的修改版本)會檢索當前視窗寬度並列印一個由=
符號組成的條以分隔輸入。
# af-magic.zsh-theme
# Repo: https://github.com/andyfleming/oh-my-zsh
# Direct Link: https://github.com/andyfleming/oh-my-zsh/blob/master/themes/af-magic.zsh-theme
if [ $UID -eq 0 ]; then NCOLOR="red"; else NCOLOR="green"; fi
local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
# primary prompt
BAR=$(printf '=%.0s' {1..$(tput cols)})
PROMPT='$FG[237]$BAR%{$reset_color%}
$FG[032]%~\
$(git_prompt_info) \
$FG[105]%(!.#.»)%{$reset_color%} '
PROMPT2='%{$fg[red]%}\ %{$reset_color%}'
RPS1='${return_code}'
# color vars
eval my_gray='$FG[237]'
eval my_orange='$FG[214]'
# right prompt
if type "virtualenv_prompt_info" > /dev/null
then
RPROMPT='$(virtualenv_prompt_info)$my_gray%n@%m%{$reset_color%}%'
else
RPROMPT='$my_gray%n@%m%{$reset_color%}%'
fi
# git settings
ZSH_THEME_GIT_PROMPT_PREFIX="$FG[075](branch:"
ZSH_THEME_GIT_PROMPT_CLEAN=""
ZSH_THEME_GIT_PROMPT_DIRTY="$my_orange*%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="$FG[075])%{$reset_color%}"
# af-magic.zsh-theme
# Repo: https://github.com/andyfleming/oh-my-zsh
# Direct Link: https://github.com/andyfleming/oh-my-zsh/blob/master/themes/af-magic.zsh-theme
if [ $UID -eq 0 ]; then NCOLOR="red"; else NCOLOR="green"; fi
local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
# primary prompt
BAR=$(printf '=%.0s' {1..$(tput cols)})
PROMPT='$FG[237]$BAR%{$reset_color%}
$FG[032]%~\
$(git_prompt_info) \
$FG[105]%(!.#.»)%{$reset_color%} '
PROMPT2='%{$fg[red]%}\ %{$reset_color%}'
RPS1='${return_code}'
# color vars
eval my_gray='$FG[237]'
eval my_orange='$FG[214]'
# right prompt
if type "virtualenv_prompt_info" > /dev/null
then
RPROMPT='$(virtualenv_prompt_info)$my_gray%n@%m%{$reset_color%}%'
else
RPROMPT='$my_gray%n@%m%{$reset_color%}%'
fi
# git settings
ZSH_THEME_GIT_PROMPT_PREFIX="$FG[075](branch:"
ZSH_THEME_GIT_PROMPT_CLEAN=""
ZSH_THEME_GIT_PROMPT_DIRTY="$my_orange*%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="$FG[075])%{$reset_color%}"
這工作得很好,但是當調整視窗大小時,它BAR
不會更新,所以它要么太短要么太長,需要多行。例子:
|==================================================================|
|~ » |
變成
|==================================================|
|================ | <- window border
|~ » |
有沒有辦法讓 zsh 或 terminator 在調整視窗大小時重新載入主題?
答案1
當調整終端大小時,shell 會收到一個訊號絞車訊號.所以更新BAR
就陷入了陷阱。在zsh中可以定義對應的陷阱功能:
TRAPWINCH () {
BAR=$(printf '=%.0s' {1..$COLUMNS})
}
您不需要調用,tput
因為 zsh 會追蹤終端機中的列數COLUMNS
多變的。
確保打開prompt_subst
選項 ( setopt prompt_subst
) 以便$PROMPT
每次顯示時都會重新計算。或者,也PROMPT
更新。TRAPWINCH
printf
您可以使用參數擴充得到一個填充字串。參數擴展通常根據變數的值進行工作,但可以讓您從字串進行工作,在本例中為空字串。這樣你就根本不需要陷阱了。${:-STRING}
setopt prompt_subst
PROMPT='$FG[237]${(l:$COLUMNS::=:):-}%{$reset_color%}
答案2
答案3
您需要將 $BAR 轉換為函數:
function bar {
echo `printf '=%.0s' {1..$(tput cols)}`
}