
He estado explorando terminfo
y stty
. Si lo ejecuto, stty -a|grep icanon
parece que el modo canónico está configurado, pero si intento apagarlo stty -icanon
y 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 echo
está activada y otra porque cat
la leerá y escribirá inmediatamente, en lugar de tener que esperar líneas completas.
[con zsh] si intento apagarlo
stty -icanon
y volver a comprobarlo, veo que todavía está configurado.
Al restaurar la configuración anterior del terminal como se describe anteriormente, zsh
también se aplicaalgunos valores predeterminados sensatos(que incluyen la configuración echo
y 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ó vi
o less
falló).
No pude encontrar ninguna zsh
opció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