¿Zsh usa el modo canónico para la terminal?

¿Zsh usa el modo canónico para la terminal?

He estado explorando terminfoy stty. Si lo ejecuto, stty -a|grep icanonparece que el modo canónico está configurado, pero si intento apagarlo stty -icanony comprobarlo nuevamente, veo que todavía está configurado. Cuando hago lo mismo en bash, puedo desactivar icanon, pero no noto ningún cambio en el comportamiento. Entonces tengo 2 preguntas; ¿Por qué no puedo desactivar icanon en zsh y cómo debería afectar el comportamiento si pudiera?

Respuesta1

Cuando hago lo mismo en bash, puedo desactivar icanon, pero no noto ningún cambio en el comportamiento.

Eso es porque bash cambia el modo canónico.apagadoal leer comandos del usuario (para poder implementar funciones de edición de líneas que no ofrece el controlador de terminal, como insertar texto, mover el cursor hacia la izquierda y hacia la derecha con las teclas de flecha, etc.), y luegorestaurala configuración anterior del terminal al ejecutar cualquier línea de comando.

Para ver su efecto, ejecute un comando externo como cat:

bash$ stty -icanon
bash$ cat
hheelloo

Cada clave se repetirá, una vez porque stty echoestá activada y otra porque catla leerá y escribirá inmediatamente, en lugar de tener que esperar líneas completas.

[con zsh] si intento apagarlo stty -icanony volver a comprobarlo, veo que todavía está configurado.

Al restaurar la configuración anterior del terminal como se describe anteriormente, zshtambién se aplicaalgunos valores predeterminados sensatos(que incluyen la configuración echoy icanon). Probablemente sea porque se supone que, si un comando sale del modo canónicoapagadoal terminar, fue solo un accidente (por ejemplo, cuando a una aplicación de pantalla completa le gustó vio lessfalló).

No pude encontrar ninguna zshopción que lo hiciera funcionar bash(y como cualquier otro programa que use la biblioteca readline), pero si desea desactivar el modo icanon antes de ejecutar un comando, puede hacerlo llamando a stty desde la misma línea de comando:

zsh$ stty -icanon; cat
hheelloo

información relacionada