
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, BAR
wird 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 BAR
in einer Falle. In zsh können Sie das entsprechendeTrap-Funktion:
TRAPWINCH () {
BAR=$(printf '=%.0s' {1..$COLUMNS})
}
Sie müssen nicht aufrufen, tput
da zsh die Anzahl der Spalten des Terminals imCOLUMNS
Variable.
Stellen Sie sicher, dass Sie denprompt_subst
Option ( setopt prompt_subst
), sodass es $PROMPT
bei jeder Anzeige neu ausgewertet wird. Alternativ können Sie auch PROMPT
in 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)}`
}