2010-08-25 13 views
5

Ho messo il seguente nel mio file ~/.localsh per personalizzare il mio prompt di bash quando si lavora con git.Elementi dinamici in bash PS1

Fondamentalmente voglio visualizzare il ramo corrente nel mio terminale. Lo strumento gitk mostra rami con sfondo verde e nero in primo piano, quindi questo è quello che sto cercando di fare.

Quello che ho funziona, ma quando premo la freccia su sulla tastiera per scorrere indietro i comandi precedenti viene sovrascritto.

Questa roba è successo prima quando non si termina una sequenza di colori con [\ e [0m]. Ora mi sta succedendo per aver chiamato la funzione getgitbranch. Penso che abbia qualcosa a che fare con il terminale senza sapere per quanto tempo è il prompt.

Quindi, ecco la domanda ... Come faccio ad usare correttamente gli elementi dinamici nel mio prompt di bash e non lo faccio scovare quando uso le frecce su?

function getgitbranch() 
{ 
git branch | grep "^\*" | cut -c3- 
} 

function blabla() 
{ 
PS1="" 
PS1="$PS1\[\e[0;30m\]\[\e[42m\]\[\$(getgitbranch)\]\[\e[0;49m\]\[\e[0m\] " 
PS1="$PS1\[\e[1;35m\][\[\e[0m\]" 
PS1="$PS1\[\e[1;33m\]\w\[\e[0m\]" 
PS1="$PS1\[\e[1;35m\]]\[\e[0m\]" 
PS1="$PS1 \[\e[1;31m\]>\[\e[0m\] " 
export PS1 
} 
+2

Se stai utilizzando il completamento di git bash (che è fantastico) puoi semplicemente inserire $ (__ git_ps1) e ottenere il nome del ramo in modo molto più solido - feedback se sei a metà-rebase, ecc. così come gli indicatori del tuo stato dell'albero di lavoro (modifiche, modifiche graduali). – Cascabel

risposta

5

Rimuovere il \[\] da tutto il $(getgitbranch). I caratteri emessi da quella funzione occupano effettivamente lo spazio sullo schermo in modo che tu voglia che Bash li contenga. L'utilizzo di \[\] dice non conteggio conta i caratteri visualizzati all'interno.

+0

Grazie a un gruppo che ha funzionato. Ho un prompt che usa colori casuali che chiamo come ... \\ [\ $ (randomColor) \\] In quel caso non volevo che fossero contati e in questo caso lo faccio. –