2 votos

Zsh mueve los textos cuando el prompt es demasiado largo

Pasos para reproducir:

  1. Cambie el tamaño del terminal a una anchura de 80 o menos, para que sea más fácil para el prompt se envuelva.

  2. Cambiar temporalmente el nombre /etc/zshrc en caso de que afecte al resultado. (Recuerde volver a cambiarlo después).

  3. Crear una carpeta muy profunda, como

    mkdir -p /tmp/very-deep/directory/very-deep/directory/very-deep/directory/very-deep/directory/very-deep/directory
  4. Ejecuta un Zsh limpio con

    /usr/bin/env -i ZDOTDIR=/tmp TERM=xterm-256color /bin/zsh
  5. Establecer el aviso con PROMPT='%~ ' .

  6. Cambia de directorio a esa carpeta. El mensaje debería aparecer.

  7. Prueba con el autocompletado. Por ejemplo, escriba dir y luego pulse la tecla Tab.

En mi máquina, después del último paso el dir se movió un carácter a la izquierda. Había un espacio entre el prompt y el comando antes de activar la finalización, que fue eliminado por dir moviéndose a la izquierda. En otras palabras, antes de pulsar Tab la línea termina con directory dir , pero la finalización hace que directorydir . Este comportamiento era similar al de Bash que no envolvía correctamente el código de escape ANSI con \[ y \] , excepto que en este caso no debería haber ningún código de escape ANSI en el prompt.

He intentado eliminar todas las variables posibles, incluyendo la variable de entorno, los archivos de configuración, el emulador de terminal. ¿Qué más puede fallar?

En caso de que importe, estoy usando Catalina.

2voto

Michael Puntos 193

En Catalina 10.15.3 zsh es la versión zsh 5.7.1 (x86_64-apple-darwin19.0) .

Compilación de la versión 5.7.1 de la corriente principal fuente muestra el mismo error mientras que la versión 5.8 no lo hace. Como puede ver a continuación, al configurar PROMPT='%~X el X se borra al pulsar tab en dir en 5.7.1 pero no en 5.8.

Screenshot

El NEWS El archivo suministrado con la versión 5.8 dice que se han hecho cambios en las funciones de finalización que pueden explicar esto, pero en cualquier caso este error parece estar solucionado.

Several changes have been made to the way completion functions track
'precommands' (such as `command` and `env`) and determine whether the
command being completed for is a shell builtin. Developers of completion
functions may wish to familiarise themselves with `_normal -p` and
`_pick_variant -b`.

También se incluye este CVE en la versión 5.8, así que quizás Apple proporcione una actualización en algún momento si no quieres compilar la tuya.

CVE-2019-20044: When unsetting the PRIVILEGED option, the shell sets its
effective user and group IDs to match their respective real IDs. On some
platforms (including Linux and macOS, but not FreeBSD), when the RUID and
EUID were both non-zero, it was possible to regain the shell's former
privileges

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X