
Estou usando o terminator com zsh em combinação com o antígeno. O tema (uma versão modificada do af-magic) que estou usando recupera a largura atual da janela e imprime uma barra que consiste em =
sinais para separar as 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%}"
Isso funciona muito bem, mas ao redimensionar a janela ela BAR
não é atualizada e fica muito curta ou muito longa, ocupando várias linhas. Exemplo:
|==================================================================|
|~ » |
torna-se
|==================================================|
|================ | <- window border
|~ » |
Existe uma maneira de fazer com que o zsh ou o terminator recarreguem o tema ao redimensionar a janela?
Responder1
Quando o terminal é redimensionado, o shell recebe umSIGWINCHsinal. Então atualize BAR
em uma armadilha. No zsh você pode definir o correspondentefunção de armadilha:
TRAPWINCH () {
BAR=$(printf '=%.0s' {1..$COLUMNS})
}
Você não precisa ligar, tput
pois o zsh rastreia o número de colunas do terminal noCOLUMNS
variável.
Certifique-se de ligar oprompt_subst
opção ( setopt prompt_subst
) para que $PROMPT
seja reavaliado cada vez que for exibido. Como alternativa, atualize PROMPT
também TRAPWINCH
.
Em vez de bifurcar para ligar printf
de uma forma estranha, você pode usarexpansão de parâmetrospara obter uma string acolchoada. A expansão de parâmetros normalmente funciona a partir do valor de uma variável, mas permite trabalhar a partir de uma string, neste caso uma string vazia. Dessa forma, você não precisa de nenhuma armadilha.${:-STRING}
setopt prompt_subst
PROMPT='$FG[237]${(l:$COLUMNS::=:):-}%{$reset_color%}
Responder2
Citaresta resposta:
Certifique-se de que oprompt_subst
opçãoestá ativado. Se necessário, adicione a seguinte linha ao seu ~/.zshrc
:
setopt prompt_subst
Isso diz ao zsh para reavaliar a string do prompt cada vez que estiver exibindo um prompt.
Responder3
Você precisa transformar $BAR em uma função:
function bar {
echo `printf '=%.0s' {1..$(tput cols)}`
}