
Según tengo entendido, al escribir caracteres en un emulador de terminal, aparecen porque se les "repite". Imaginamos que el terminal es un dispositivo separado que se comunica con la computadora a través de un canal bidireccional, y cada tecla ingresada no actualiza la pantalla inmediatamente, sino que aparece cuando se envía de regreso desde la computadora.
Mi pregunta es cómo es posible que la tecla de retroceso, o cualquier tecla configurada para "borrar" stty
, parezca borrar un carácter en la pantalla. si en un xterm
lo hago
$ stty erase x
$ cat -
aaaaaaaaaax
lo último x
que escribo parece borrar lo último a
. Sin embargo, si se tratara de una terminal real, separada de la computadora, no tendría ninguna forma de saber cuál stty erase
es el personaje. La única forma en que esperaría obtener este comportamiento sería si el carácter de borrado fuera ^H
repetido, y el terminal interpretara esto como un carácter de control especial que le indicara que borrara el carácter antes del cursor.
¿Es esta una peculiaridad de los emuladores de terminal, donde "hacen trampa" y buscan cuál stty erase
es el personaje?
Respuesta1
El emulador de terminal envía el x
carácter y el controlador del terminal ve que se ha configurado como carácter de borrado. Entonces, en lugar de devolverlo al emulador, envía la secuencia apropiada para borrar el carácter anterior (por ejemplo, retroceso-espacio-retroceso).
Incluso cuando el carácter de borrado está configurado en Backspace, simplemente repetirlo no borrará lo que se escribió. Cuando BS
se envía un carácter a una terminal, simplemente mueve el cursor un carácter hacia la izquierda, no lo borra. Por lo tanto, el controlador del terminal aún tendría que enviar un espacio-retroceso adicional para borrarlo y dejar el cursor en esa ubicación.