Me pregunto por qué Shift+ Arrow Keyresultado en uno de los A, B, Co Dletras.
¿Por qué no otras letras? ¿Por qué alguna carta?
command-line
Dan
fuente
fuente

Shift + Arrow Keysno hace nada.Respuestas:
Emuladores de terminal, tales como
gnome-terminal( "Terminal" en Ubuntu), sino tambiénxterm, yurxvtse 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?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
$TERMvariable, una base de datos nombradaterminfoes 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;2pero no muestra nada porque no conoce esa secuencia de escape. PeroAse deja y se muestra.fuente
^[[Atiene sentido cuando hago clic en las teclas de flecha mientras se ejecuta un proceso en el terminal.cat >/dev/nullluego escribir y presionar Ctrl + C (o Intro y luego Ctrl + D) cuando haya terminado.