¿Cuál es la historia de las teclas Shift + Arrow en la terminal?


21

Me pregunto por qué Shift+ Arrow Keyresultado en uno de los A, B, Co Dletras.

¿Por qué no otras letras? ¿Por qué alguna carta?


Intrigante: D ¿Mi apuesta? Tiene que ver con juegos basados ​​en texto: D
Rinzwind

2
Solo una observación: en tty Shift + Arrow Keysno hace nada.
Radu Rădeanu

@Rinzwind: :)))
Radu Rădeanu

1
Hice esta pregunta en Unix / Linux Stack Exchange. Hay algunas respuestas útiles. Tal vez quieras mirarlos. unix.stackexchange.com/questions/73669/…
yfklon

Respuestas:


27

Emuladores de terminal, tales como gnome-terminal( "Terminal" en Ubuntu), sino también xterm, y urxvtse 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?

Terminal VT-100 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.

DEC VT-52 Mantenimiento Manuel 1976

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 nombrada terminfoes 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;2pero no muestra nada porque no conoce esa secuencia de escape. Pero Ase deja y se muestra.


55
Wow interesante. Ahora, todo eso ^[[Atiene sentido cuando hago clic en las teclas de flecha mientras se ejecuta un proceso en el terminal.
Dan

44
Puede presionar CTRL-v justo antes de presionar SHIFT-UpArrow para 'ver' las secuencias de escape en forma cruda. A menos que haya cambiado los valores predeterminados, ESC debería aparecer en la pantalla de su terminal como ^ [
arielf

@arielf También puede ejecutar, cat >/dev/nullluego escribir y presionar Ctrl + C (o Intro y luego Ctrl + D) cuando haya terminado.
wjandrea
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.