2010-08-25 10 views
5

He puesto lo siguiente en mi archivo ~/.localsh para personalizar mi indicador bash cuando trabajo con git.Elementos dinámicos en bash PS1

Básicamente quiero que se muestre la rama actual en mi terminal. La herramienta gitk muestra ramas con fondo verde y primer plano en negro, así que eso es lo que estoy tratando de hacer.

Lo que tengo funciona, pero cuando presiono la flecha hacia arriba en el teclado para retroceder a través de los comandos anteriores, se sobrescribe.

Esto ha sucedido antes cuando no terminaba una secuencia de colores con [\ e [0m]. Ahora me está sucediendo por llamar a la función getgitbranch. Creo que tiene algo que ver con el terminal sin saber cuánto tiempo es el mensaje.

Entonces, aquí está la pregunta ... ¿Cómo uso correctamente los elementos dinámicos en mi aviso de bash y no lo arreglo cuando utilizo las flechas hacia arriba?

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

Si está utilizando la finalización de git bash (que es increíble) puede poner $ (__ git_ps1) allí, y obtener el nombre de la sucursal de forma mucho más robusta - comentarios si está en medio de la base de datos, etc. - como así como indicadores en cuanto al estado de su árbol de trabajo (modificaciones, modificaciones por etapas). – Cascabel

Respuesta

5

Retire la \[\] de todo el $(getgitbranch). Los caracteres emitidos por esa función en realidad ocupan espacio en la pantalla, por lo que quiere que Bash los explique. El uso de \[\] dice no cuente los caracteres que aparecen dentro.

+0

Gracias un montón que funcionó. Tengo un mensaje que usa colores aleatorios a los que llamo como ... \\ [\ $ (randomColor) \\] En ese caso, no quería que se contaran y en este caso lo hago. –

Cuestiones relacionadas