2012-02-13 12 views
5

Quiero cambiar el color del texto de entrada en zsh (el texto que escribo para cada comando). Ejemplo: en [email protected]> ls ~/ Me gustaría que ls ~/fuera amarillo para destacarse de la salida estándar.zsh change prompt input color

sé que puedo lograr esto en golpe usando

export PS1=" $BIGreen \[email protected]\h \w \$ $IYellow" 

Al final de la indicación, el color se establece en amarillo, el tipo de entrada de texto que es de color amarillo (con las variables de color apropiadas definidas) Y luego

trap 'echo -ne "\e[0m"' DEBUG 

que restablece el color a la normalidad cuando se muestran los resultados de mi mando.

¿Cómo puedo lograr esto en zsh? Actualmente, tengo

PROMPT=$'{$fg[green]%}%[email protected]%{$fg[green]%}%m %# %{$fg[yellow]%}' 

en .zshrc (configurando el color al amarillo al final) pero no funciona. (Tampoco sabría cómo volver a poner el color a blanco después del comando).

Respuesta

3

Prueba esto:

PROMPT="%F{green}%[email protected]%m %# %F{yellow}" 
preexec() { echo -ne "\e[0m" } 

He intentado utilizar trap, pero parece que DEBUG no ocurre hasta después de ejecutado el comando/antes de que el siguiente símbolo del sistema, por lo que el comando termina la ejecución en amarillo. Se llama a la función preexec() antes de que se ejecute el comando, por lo que puede restaurar allí el color predeterminado.

+1

¡Esto es exactamente lo que quería! Gracias. ¿Te importaría explicar cómo funciona esto? Además, una advertencia es que el color revierte durante el autocompletado (por ejemplo, 'ls somepath [tab]'), al menos para mi configuración (creo que zsh está insertando una barra descolorida durante el autocompletado), pero esa es una queja muy leve. –

+1

Hubo un error tipográfico en la cadena original ('# F' en lugar de'% F'), pero ese tampoco era el problema. Me di cuenta de que estoy teniendo el mismo problema que tú con el cambio de color después de una autocompletar. 'prexec()' se llama antes de cada comando ejecutado desde el shell, que es cómo funciona esto para restablecer el color. Resulta que se supone que debes cerrar todos los cambios de color '% F' con una etiqueta'% f' para restaurar el color original. Si encuentro una mejor solución para esto, actualizaré la respuesta. –