Shell
調整終止符視窗大小時重新載入 zsh
我將終止器與 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 在調整視窗大小時重新載入主題?
當終端調整大小時,shell 會收到一個SIGWINCH信號。所以
BAR
在一個陷阱中更新。在 zsh 中你可以定義相應的陷阱函式:TRAPWINCH () { BAR=$(printf '=%.0s' {1..$COLUMNS}) }
您不需要呼叫,因為 zsh 會跟踪變數
tput
中終端的列數。COLUMNS
確保打開
prompt_subst
選項 (setopt prompt_subst
),以便在$PROMPT
每次顯示時重新評估。或者,也可以更新PROMPT
。TRAPWINCH
printf
您可以使用參數擴展來獲取填充字元串,而不是以一種奇怪的方式進行分叉呼叫。參數擴展通常根據變數的值工作,但允許您從字元串工作,在本例中為空字元串。這樣你就完全不需要陷阱了。${:-*STRING*}
setopt prompt_subst PROMPT='$FG[237]${(l:$COLUMNS::=:):-}%{$reset_color%}