ターミネータウィンドウのサイズを変更するときに zsh を再読み込みする

ターミネータウィンドウのサイズを変更するときに zsh を再読み込みする

私は、antigen と組み合わせて zsh で terminator を使用しています。私が使用しているテーマ (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

端末のサイズが変更されると、シェルはシグウィンチシグナル。BARトラップで更新します。zshでは対応するトラップ機能:

TRAPWINCH () {
  BAR=$(printf '=%.0s' {1..$COLUMNS})
}

tputzshは端末の列数を追跡しているので、COLUMNS変数

必ずオンにしてくださいprompt_substオプション ( setopt prompt_subst) を使用すると、$PROMPT表示されるたびに再評価されます。あるいは、も更新しPROMPTます。TRAPWINCH

printf奇妙な方法でフォークして呼び出す代わりに、パラメータ拡張埋め込まれた文字列を取得します。パラメータ展開は通常、変数の値から機能しますが、代わりに文字列 (この場合は空の文字列) から機能することもできます。この方法では、トラップはまったく必要ありません。${:-STRING}

setopt prompt_subst
PROMPT='$FG[237]${(l:$COLUMNS::=:):-}%{$reset_color%}

答え2

引用するこの答え:

必ずprompt_subst オプションがオンになっています。必要に応じて、次の行を に追加します~/.zshrc

setopt prompt_subst

これは、プロンプトを表示するたびにzshにプロンプ​​ト文字列を再評価するように指示します。

答え3

$BAR を関数に変換する必要があります:

function bar {
    echo `printf '=%.0s' {1..$(tput cols)}`
}

関連情報