
Estoy usando terminator con zsh en combinación con antígeno. El tema (una versión modificada de af-magic) que estoy usando recupera el ancho de la ventana actual e imprime una barra que consta de =
signos para separar las entradas.
# 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%}"
Esto funciona bastante bien, pero al cambiar el tamaño de la ventana BAR
no se actualiza, por lo que es demasiado corta o demasiado larga y ocupa varias líneas. Ejemplo:
|==================================================================|
|~ » |
se convierte
|==================================================|
|================ | <- window border
|~ » |
¿Hay alguna manera de hacer que zsh o terminator recarguen el tema al cambiar el tamaño de la ventana?
Respuesta1
Cuando se cambia el tamaño del terminal, el shell recibe unCABRESTANTEseñal. Así que actualiza BAR
en una trampa. En zsh puedes definir el correspondientefunción de trampa:
TRAPWINCH () {
BAR=$(printf '=%.0s' {1..$COLUMNS})
}
No es necesario llamar tput
ya que zsh rastrea el número de columnas de la terminal en elCOLUMNS
variable.
Asegúrese de encender elprompt_subst
opción ( setopt prompt_subst
) para que $PROMPT
se reevalúe cada vez que se muestre. Alternativamente, actualice PROMPT
también TRAPWINCH
.
En lugar de bifurcar para llamar printf
de una manera extraña, puedes usarexpansión de parámetrospara conseguir una cuerda acolchada. La expansión de parámetros normalmente funciona a partir del valor de una variable, pero le permite trabajar a partir de una cadena, en este caso una cadena vacía. De esta manera no necesitas ninguna trampa.${:-STRING}
setopt prompt_subst
PROMPT='$FG[237]${(l:$COLUMNS::=:):-}%{$reset_color%}
Respuesta2
Citaresta respuesta:
Asegúrese de que elprompt_subst
opciónestá prendido. Si es necesario, agregue la siguiente línea a su ~/.zshrc
:
setopt prompt_subst
Esto le dice a zsh que reevalúe la cadena de mensaje cada vez que muestra un mensaje.
Respuesta3
Necesitas convertir $BAR en una función:
function bar {
echo `printf '=%.0s' {1..$(tput cols)}`
}