Me pregunto por qué Shift+ Arrow Keyresultado en uno de los A
, B
, C
o D
letras.
¿Por qué no otras letras? ¿Por qué alguna carta?
Shift + Arrow Keys
no hace nada.
Me pregunto por qué Shift+ Arrow Keyresultado en uno de los A
, B
, C
o D
letras.
¿Por qué no otras letras? ¿Por qué alguna carta?
Shift + Arrow Keys
no hace nada.
Respuestas:
Emuladores de terminal, tales como gnome-terminal
( "Terminal" en Ubuntu), sino también xterm
, y urxvt
se denominan "emuladores" porque reproducen el comportamiento de los terminales más antiguos que eran la única pantalla de un ordenador. Tales terminales se comunicaron con la computadora con un protocolo basado en texto y fueron diseñados inicialmente para recibir solo texto. Rápidamente, se necesitaba más control: ¿cómo borrar una línea? Usa colores? ¿O cambiar la posición del cursor?
Fuente: El arte de la usabilidad de Unix - Interfaces de línea de comandos
Las secuencias de escape fueron diseñadas para que cada terminal haga tales cosas. Ellos llevan el nombre de escape , ya que comienzan con el código de escape ASCII: 33
. No hay forma de imprimir un personaje así directamente, lo que lo hace un buen ajuste para tales secuencias. Cuando todavía queremos mostrar esto, ^[[
se usa, y esto es lo que usaré en mis explicaciones.
Cuando el terminal recibió ^[[A
, no significaba "imprimir ^ [[A", sino "el usuario presionó la tecla de flecha hacia arriba". "A" aquí es totalmente arbitrario: simplemente es la carta que todos acordaron, porque eso es lo que usaba el DEC VT-52 y su sucesor, el popular terminal VT-100.
Fuente: Manual de mantenimiento DEC VT-52 1976
Esta es todavía la forma en que funcionan los emuladores de terminal hoy en día: dependiendo de la $TERM
variable, una base de datos nombrada terminfo
es responsable de decir qué códigos deben enviarse al shell (bash, sh, zsh ...), que luego es responsable de comprenderlos y reaccionar a ellos
Ahora, el código para Shift+ upresulta ser ^[[1;2A
: el emulador de terminal envía este código al shell, que intenta interpretar ^[[1;2
pero no muestra nada porque no conoce esa secuencia de escape. Pero A
se deja y se muestra.
^[[A
tiene sentido cuando hago clic en las teclas de flecha mientras se ejecuta un proceso en el terminal.
cat >/dev/null
luego escribir y presionar Ctrl + C (o Intro y luego Ctrl + D) cuando haya terminado.