Laden Sie zsh neu, wenn Sie die Größe des Terminatorfensters ändern

Laden Sie zsh neu, wenn Sie die Größe des Terminatorfensters ändern

Ich verwende Terminator mit zsh in Kombination mit Antigen. Das von mir verwendete Design (eine modifizierte Version von af-magic) ruft die aktuelle Fensterbreite ab und druckt einen Balken aus =Zeichen, um die Eingaben zu trennen.

# 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%}"

Das funktioniert ziemlich gut, aber wenn man die Größe des Fensters ändert, BARwird es nicht aktualisiert und ist daher entweder zu kurz oder zu lang und nimmt mehrere Zeilen ein. Beispiel:

|==================================================================|
|~ »                                                               |

wird

|==================================================| 
|================                                  | <- window border
|~ »                                               |

Gibt es eine Möglichkeit, entweder zsh oder Terminator dazu zu bringen, das Design beim Ändern der Fenstergröße neu zu laden?

Antwort1

Bei einer Größenänderung des Terminals erhält die Shell eineZEICHENWINCHSignal. Update also BARin einer Falle. In zsh können Sie das entsprechendeTrap-Funktion:

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

Sie müssen nicht aufrufen, tputda zsh die Anzahl der Spalten des Terminals imCOLUMNSVariable.

Stellen Sie sicher, dass Sie denprompt_substOption ( setopt prompt_subst), sodass es $PROMPTbei jeder Anzeige neu ausgewertet wird. Alternativ können Sie auch PROMPTin aktualisieren.TRAPWINCH

Anstatt auf eine seltsame Art und Weise aufzurufen printf, können Sie verwendenParametererweiterungum eine aufgefüllte Zeichenfolge zu erhalten. Die Parametererweiterung funktioniert normalerweise mit dem Wert einer Variablen, ermöglicht Ihnen aber stattdessen mit einer Zeichenfolge zu arbeiten, in diesem Fall einer leeren Zeichenfolge. Auf diese Weise benötigen Sie überhaupt keine Trap.${:-STRING}

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

Antwort2

Zitierendiese Antwort:

Stellen Sie sicher, dass dieprompt_subst Möglichkeitist eingeschaltet. Fügen Sie bei Bedarf die folgende Zeile zu Ihrer hinzu ~/.zshrc:

setopt prompt_subst

Dies weist zsh an, die Eingabeaufforderungszeichenfolge jedes Mal neu auszuwerten, wenn eine Eingabeaufforderung angezeigt wird..

Antwort3

Sie müssen $BAR in eine Funktion umwandeln:

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

verwandte Informationen