Caret corchete corchete A ^ [[A - ¿Qué significa?

13

Pido disculpas si esto ya se ha preguntado, pero no tengo idea de cómo puedo averiguarlo yo mismo: cuando busco "^ [[A" en cualquier motor de búsqueda, ignora por completo la parte "^ [[".

De todos modos, mi pregunta: a veces en la terminal (en una Mac) cuando presiono las teclas de flecha, aparecen los caracteres "^ [[A", "^ [[B", "^ [[C" o "^ [[D" . Me parece recordar haber encontrado esto hace años cuando usé DOS (muy probablemente) también y creo que ocurrió con mucha más frecuencia también.

¿Por qué sucede esto y qué significan?

Phill
fuente

Respuestas:

20

Estos son los códigos de escape ANSI . El ^[representa un carácter ESC (escape), el siguiente [es un soporte real cuadro de la izquierda, y la letra indica la función del código de escape. La Esc[parte se llama CSI (Introductor de secuencia de control). Entonces, la secuencia CSI Asignifica flecha hacia arriba o CUU (CUrsor hacia arriba).

De todos modos, este esquema se remonta a la época del terminal de pantalla VT100 (introducido en 1978). Algunas de las secuencias de escape utilizadas por el VT100 fueron estandarizadas por ANSI a principios de la década de 1980 y han seguido siendo de uso común desde entonces.

Normalmente, cuando presiona las teclas de flecha, algún programa (por ejemplo, el shell) está escuchando y puede actuar sobre ellas. Entonces, cuando presionas la flecha hacia arriba, se desplaza hacia atrás en tu historial de comandos. Sin embargo, si se está ejecutando un programa que no comprende las secuencias de escape para las teclas de flecha, entonces generalmente terminan volviendo a la terminal como cualquier otra tecla que pueda presionar. Es por eso que a veces ves ^[[Asi presionas la tecla de flecha hacia arriba.

Greg Hewgill
fuente
También vale la pena señalar que ^ es la convención común de UNIX para mostrar "control" en el terminal. Por ejemplo, si presiona Ctrl + A y se ignora de la misma manera, se mostrará como "^ A". Ctrl + [es en realidad un sinónimo del carácter de escape. Por cierto, ¿qué es lo que hace que esto suceda en primer lugar? ¿Qué software decide imprimir el cursor? ¿Es el emulador de terminal en sí mismo o algo más que no conozco?
Muzer
@Muzer, el núcleo mismo formatea con cuidado los caracteres repetidos. La función se puede desactivar constty -echoctl
El grano? Interesante, no sabía que fuera tan profundo (aunque en retrospectiva, debería haber sido obvio, ¡ya que incluso ocurre en las primeras etapas del arranque!).
Muzer