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?
command-line
Dan
fuente
fuente
Shift + Arrow Keys
no hace nada.Respuestas:
Emuladores de terminal, tales como
gnome-terminal
( "Terminal" en Ubuntu), sino tambiénxterm
, yurxvt
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 nombradaterminfo
es responsable de decir qué códigos deben enviarse al shell (bash, sh, zsh ...), que luego es responsable de comprenderlos y reaccionar a ellosAhora, 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. PeroA
se deja y se muestra.fuente
^[[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.