El mensaje Bash de generación larga se ajusta incorrectamente cuando comienzo a escribir


5

Tengo un aviso Bash que demora un tiempo (~ 100-200ms) en generarse, ya que incluye el estado del árbol de trabajo de Git que lleva algún tiempo calcular. A veces empiezo a escribir un comando antes de que aparezca, pero luego el comando se ajusta incorrectamente.

Esto es lo que veo en la terminal:

# I start typing:
some command...

# then the prompt appears:
some command...username [branch*] some/directory $ some command...

# then I type some more, causing the command to wrap:
some command...username [branch*] some/directory $ some command...wra
pping text 1

# and when I continue typing, the text overwrites the second line:
some command...username [branch*] some/directory $ some command...wra
wrapping text 2

¿Alguna idea de cómo prevenir esto?

Así es como se configura mi solicitud Bash:

# in .bashrc:
PROMPT_COMMAND="PS1=\`/home/username/my-prompt.sh\`"

# in /home/username/my-prompt.sh:
$PROMPT=...
$PROMPT+=...
echo -ne $PROMPT

Creo que he creado todos mis \[e \]s correctamente dentro de $ PRONTO. El problema aparece solo cuando empiezo a escribir antes de que aparezca el mensaje y mi comando se cierra.


1
Puede usar \ra al comienzo de la solicitud (dentro de la \[ \]parte) para hacer que la solicitud siempre comience al comienzo de la línea.
wurtel

Respuestas:


4

Puede funcionar para deshabilitar la salida del terminal mientras se genera la solicitud:

PROMPT_COMMAND="PS1=\$(stty -echo)\`/home/username/my-prompt.sh\`\$(stty echo)"

0

Te sugiero que lleves tu terminal al modo cuerdo (broma) usando

stty sane  # I hope it'll help and bring back the working of default prompt.

1
Esto puede no ser una buena idea, eso no es necesariamente el valor predeterminado del terminal, y muchos de los efectos no se aplican de readlinetodos modos porque simplemente lo restablecerá al modo sin procesar y manejará el resto por sí mismo. stty saneprobablemente debería considerarse una última zanja, no un defecto.
mikeserv

1
@ mikeserv-Puede ser!
Am_I_Helpful

Muy buen punto.
mikeserv
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.