Editar tema ZSH para o nome virtualenv

3

Eu uso o tema zsh intheloops . O tema se parece com isso quando nenhum env virtual. está ativo

-- an empty line --
[sourabh@skynet] ~/Code/django_apps/cope (master) ⚡ 
❯

e quando um env. está ativo,

(env name)
[sourabh@skynet] ~/Code/django_apps/cope (master) ⚡ 
❯

Posso fazer com que pareça assim quando algum virtualenv está ativo

-- empty line --
(env name) [sourabh@skynet] ~/Code/django_apps/cope (master) ⚡ 
❯

.zsh-theme file

local return_status="%{$fg[red]%}%(?..⏎)%{$reset_color%}"

local host_color="green"
if [ -n "$SSH_CLIENT" ]; then
  local host_color="red"
fi

PROMPT='
%{$fg_bold[grey]%}[%{$reset_color%}%{$fg_bold[${host_color}]%}%n@%m%{$reset_color%}%{$fg_bold[grey]%}]%{$reset_color%} %{$fg_bold[blue]%}%10c%{$reset_color%} $(git_prompt_info) $(git_remote_status)
%{$fg_bold[cyan]%}❯%{$reset_color%} '


RPROMPT='${return_status}%{$reset_color%}'

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}(%{$fg[yellow]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[yellow]%}) %{$fg[pink]%}⚡%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[grey]%})"
ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE="%{$fg_bold[magenta]%}↓%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE="%{$fg_bold[magenta]%}↑%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIVERGED_REMOTE="%{$fg_bold[magenta]%}↕%{$reset_color%}"
    
por Sourabh 04.10.2013 / 15:46

3 respostas

3

Como o prompt é alterado é definido no script bin/activate dentro do diretório do ambiente virtual. Este arquivo é criado por virtualenv de um modelo. Infelizmente, a única maneira de modificação rápida fornecida pelo modelo é prefixar (env name) ou o que for definido com --prompt .

Para modificar o prompt da maneira que você quer, sugiro contornar a configuração do prompt em bin/activate e modificar a definição de PROMPT em seu arquivo de tema.

Primeiro, adicione o seguinte ao seu .zsh-theme (ou .zshrc )

export VIRTUAL_ENV_DISABLE_PROMPT=yes

function virtenv_indicator {
    if [[ -z $VIRTUAL_ENV ]] then
        psvar[1]=''
    else
        psvar[1]=${VIRTUAL_ENV##*/}
    fi
}

add-zsh-hook precmd virtenv_indicator

e adicione %(1V.(%1v).) na frente da segunda linha da definição de PROMPT . Deveria então ficar assim:

PROMPT='
%(1V.(%1v).)%{$fg_bold[grey]%}[%{$reset_color%}%{$fg_bold[${host_color}]%}%n@%m%{$reset_color%}%{$fg_bold[grey]%}]%{$reset_color%} %{$fg_bold[blue]%}%10c%{$reset_color%} $(git_prompt_info) $(git_remote_status)
%{$fg_bold[cyan]%}❯%{$reset_color%} '

Se você quiser alguma cor, adicione %(1V.%{$fs_bold[yellow]%}(%1v)%{$reset_color%}.) , por exemplo.

Explicação :

virtenv_indicator será chamado toda vez antes que o prompt seja criado. Verifica se $VIRTUAL_ENV está definido e não está vazio. Nesse caso, ele define o primeiro elemento da matriz $psvar como $VIRTUAL_ENV com tudo antes e incluindo o último / removido (como basename $VIRTUAL_ENV , mas menos caro)

Na definição de PROMPT %(1V.(%1v).) verifica se o primeiro elemento de $psvar está definido e não vazio ( %(1V.true-text.false-text) ) e adiciona o conteúdo desse elemento mais alguns parênteses ( (%1v) )

export VIRTUAL_ENV_DISABLE_PROMPT=yes desativa qualquer configuração de prompt por bin/activate scripts.

    
por Adaephon 06.12.2013 / 16:10
2

Oh-my-zsh agora inclui um plug-in virtualenv , portanto, ative-o no config .

    
por Ivan Mesic 22.04.2014 / 20:37
0

Se você estiver usando o prezto , poderá encontrar instruções sobre como exibir o virtualenv ativo aqui: link

    
por creimers 16.01.2015 / 13:50