Recientemente modifiqué un poco mi PS1. El código de la siguiente manera:
PS1='$(if [[ $? != 0 ]]; then echo " \e[91m\e[0m"; fi) \u $(assemble_prompt)$ '
El carácter que falta es defuentes-nerdy no importa en mi pregunta (ni tampoco en assemble_prompt
la función).
El problema que encontré es una PS1 rota cuando reduje el tamaño de la ventana del terminal al tamaño de un mensaje (aprox.). Luego parece ignorar la configuración de PS1 y configura PS1 $
solo con caracteres (ver captura de pantalla). Tenga en cuenta que cuando empiezo a escribir, simplemente anula mi mensaje personalizado en esta ocasión.
Reduje el problema a una cláusula if que agrega un carácter de "fallo" si el comando anterior no tuvo éxito. Si elimino esa parte, todo funciona como se esperaba.
¿Hay alguna manera de mantener if
parte de la cláusula pero solucionar el problema con el reinicio de PS1 cuando el tamaño de la ventana es demasiado pequeño?
PD: Lo uso rxvt-unicode
como terminal pero el problema persiste también en todos los demás terminales (probado xterm
, st
).
Respuesta1
Probablemente quieras incluir los códigos de control del terminal \[...\]
para decirle a Bash que en realidad no están imprimiendo caracteres. De lo contrario, confundirán el shell cuando intenten contar el ancho del mensaje.
Entonces usa "\[\e[91m\]xxx\[\e[0m\]"
.
Desde elmanual:
\[ Begin a sequence of non-printing characters.
This could be used to embed a terminal control sequence into the prompt.
\] End a sequence of non-printing characters.