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.

hmp
fuente
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)"
Hauke ​​Laging
fuente
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.
Am_I_Helpful
fuente
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