Formata o prompt zsh de acordo com o valor de uma variável de ambiente

0

Eu quero que a cor do meu prompt zsh seja decidida com base em se estou dentro de uma sessão do tmux ou não. No bash, isso pode ser feito verificando o valor de $ TMUX, mas não consigo encontrar um método equivalente em zsh. É possível em zsh?

    
por saga 17.05.2017 / 10:27

2 respostas

2

Em zsh, a prompt_subst opção está desativada por padrão. Se você quiser usar substituições de variáveis em seu prompt, ative-o.

setopt prompt_subst
PS1='$foo'

Por $TMUX , você não precisa disso. O valor não muda durante a sessão, então você pode inicializar PS1 quando o shell for iniciado.

setopt prompt_subst
if (($+TMUX)); then
  PS1='[tmux:${TMUX_PANE//\%/%%}] %# '
else
  PS1='[not tmux] %# '
fi

Observe que a expansão de prompt ocorre após a substituição de variáveis. É por isso que o sinais de porcentagem no valor da variável precisam ser protegidos.

    
por 18.05.2017 / 03:21
1

Quando iniciado, o tmux herdará as variáveis de ambiente do shell que o iniciou (como todos os outros processos). A partir desse ponto, o tmux irá então fornecer essas mesmas variáveis de ambiente para os pseudo-terminais que ele cria. Exceto por uma importante variável de ambiente

$TERM

O servidor tmux manterá o valor dado a ele pelo shell original.
Você pode consultar isso com

<C-b>:display-message "$TERM"

no meu sistema, isso dá xterm-256color .
mas todos os pseudo-terminais do tmux começam com algo como

$TERM=screen

no meu sistema eu configurei os pseudo-terminais para TERM=screen-256color para que programas (vim) rodando dentro do tmux conheçam as capacidades de cor do terminal. Você pode fazer isso com este comando tmux

set -g default-terminal "screen-256color"

De qualquer forma, você pode verificar a presença dessa string e definir seu prompt de acordo

~/.zshrc

if [[ $TERM == *screen* ]]; then
    # you're in tmux, congratulate yourself :)
    # set your tmux prompt here
else
    # you're not in tmux
    # set your fallback prompt here
fi
    
por 17.05.2017 / 11:26