2013-02-20 15 views
7

Ho virtualenv in esecuzione su Mac OSX (10.8.2), e mentre funziona (posso impostare venvs, passare da una all'altra, attivare e disattivare), l'unica cosa che non funziona (ed è piuttosto fastidiosa) è l'interruttore di richiesta del terminale.Perché virtualenv non imposta il mio terminale?

mia richiesta di base è [\u] \w \n\[\033[0;31m\]$\[\e[0m\], che rende come:

[hugo] /current/directory/path/ 
$ 

cioè esso ha un'interruzione di linea in esso.

Se posso attivare un virtualenv, mi sarei aspettato:

(myproject)[hugo] /current/directory/path/ 
$ 

Ma in realtà io ottenere alcun cambiamento.

Ho aperto lo script /bin/activate, e guardato il codice:

if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then 
    _OLD_VIRTUAL_PS1="$PS1" 
    if [ "x" != x ] ; then 
     PS1="$PS1" 
    else 
    if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then 
     # special case for Aspen magic directories 
     # see http://www.zetadev.com/software/aspen/ 
     PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" 
    else 
     PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" 
    fi 
    fi 
    export PS1 
fi 

Se mi attengo un'eco in alla fine, posso vedere i che la PS1 var è impostata su (myproject)[\u] \w \n\[\033[0;31m\]$\[\e[0m\], ma per qualche motivo che non si blocca, e il PS1 corretto non viene esportato.

Si tratta di qualcosa che riguarda il prompt personalizzato o un problema di autorizzazioni? È chiaramente non una cosa virtuale, come so che funziona (e in effetti funziona sulla mia vagabonda VM, non solo sul mio host OSX).

?

[UPDATE 1]

Il mio errore - sembra che ho un git-aware pronta, che sovrascrive la richiesta in base allo stato directory/repo. Questo è ciò che sta uccidendo il prompt venv. Ora ho solo bisogno di uno che faccia entrambe le cose - quindi, la domanda di follow-up è: qualcuno ha un prompt di colore, git-aware, OSX che si adatta bene con virtualenv.

risposta

10

Qualunque cosa stia configurando il prompt di git-aware probabilmente sta definendo la funzione PROMPT_COMMAND. Prova ad aggiungere questo alla fine del tuo file .bashrc.

add_venv_info() { 
    if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then 
     _OLD_VIRTUAL_PS1="$PS1" 
     if [ "x" != x ] ; then 
      PS1="$PS1" 
     else 
      if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then 
       # special case for Aspen magic directories 
       # see http://www.zetadev.com/software/aspen/ 
       PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" 
      elif [ "$VIRTUAL_ENV" != "" ]; then 
       PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" 
      fi 
     fi 
     export PS1 
    fi 
} 
PROMPT_COMMAND=add_venv_info 
+0

Yup - grazie - ho lavorato fuori alla fine –

+0

Likewise- ha dovuto perdere tempo a. l'operazione di aggiunta alla fine di .bashrc non ha funzionato direttamente, ma ho copiato questo script (che è lo stesso di "bin/activate" nella cartella virtualenv) direttamente sotto l'altra configurazione del prompt in .bashrc , ma prima dell'esportazione di PS1, e ha funzionato. – Nate

+0

Penso che ci debba essere un punto e virgola aggiunto nell'ultima riga e tra $ PROMPT_COMMAND e add_venv_info per farlo funzionare. – jgosmann

5

Ho avuto lo stesso problema, ma la soluzione di cui sopra non ha funzionato per me.

ho finito per fare questo: (mente che c'è un ulteriore spazio per separare l'(virtenv) dal $

# Virtual ENV stuff 
add_venv_info() { 
    if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then 
     VIRT_ENV_TXT="" 
     if [ "x" != x ] ; then 
      VIRT_ENV_TXT="" 
     else 
      if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then 
       # special case for Aspen magic directories 
       # see http://www.zetadev.com/software/aspen/ 
       VIRT_ENV_TXT="[`basename \`dirname \"$VIRTUAL_ENV\"\``]" 
      elif [ "$VIRTUAL_ENV" != "" ]; then 
       VIRT_ENV_TXT="(`basename \"$VIRTUAL_ENV\"`)" 
      fi 
     fi 
     if [ "${VIRT_ENV_TXT}" != "" ]; then 
      echo ${VIRT_ENV_TXT}" " 
     fi 
    fi 
} 

# Now we construct the prompt. 
# in my case a bunch of lines constructing the complete PS1 
# somewhere call the add_venv_info function like below 

     PS1=${PS1}"\[\$(job_color)\]\n\$(add_venv_info)\$\[${NC}\] " 
+0

è necessario fornire job_color – msudder

+1

Ho avuto lo stesso problema in cui la risposta principale non ha funzionato per me. Ho aggiunto la tua funzione add_venv_info nella mia funzione di costruzione rapida e funziona perfettamente, grazie. –

+0

Ha fatto la stessa cosa di @TomDalton, funziona perfettamente! Si noti che il pezzo 'if [" x "! = X]' non ha veramente uno scopo e può essere cancellato. – Pascal

Problemi correlati