Staffa quadrata quadrata Staffa quadrata quadrata A ^ [[A - Cosa significa?


13

Mi scuso se questo è già stato chiesto, ma non ho idea di come posso scoprirlo da solo - quando cerco "^ [[A" in qualsiasi motore di ricerca, ignora del tutto la parte "^ [[".

Ad ogni modo, la mia domanda: a volte nel terminale (su un Mac) quando premo i tasti freccia, compaiono i caratteri "^ [[A", "^ [[B", "^ [[C" o "^ [[D" . Mi sembra di averlo incontrato anni fa quando ho usato (molto probabilmente) DOS e penso che si sia verificato anche molto più frequentemente.

Perché succede e cosa significano?

Risposte:


20

Questi sono codici di escape ANSI . Il ^[rappresenta un carattere ESC (escape), il successivo [è una staffa effettivo sinistra quadrata, e la lettera indica la funzione del codice di escape. La Esc[parte è chiamata CSI (Control Sequence Introducer). Quindi la sequenza CSI Asignifica freccia su o CUU (CUrsor su).

Comunque, questo schema risale al tempo del terminale display VT100 (introdotto nel 1978). Alcune delle sequenze di escape utilizzate dal VT100 sono state standardizzate dall'ANSI all'inizio degli anni '80 e da allora sono rimaste di uso comune.

Normalmente, quando si premono i tasti freccia, alcuni programmi (diciamo la shell) stanno ascoltando e possono agire su di essi. Quindi quando premi la freccia su, scorre indietro nella cronologia dei tuoi comandi. Tuttavia, se è in esecuzione un programma che non comprende le sequenze di escape per i tasti freccia, di solito finiscono per essere ripetute al terminale proprio come qualsiasi altro tasto che si possa premere. Ecco perché a volte vedi ^[[Ase premi il tasto freccia su.


Vale anche la pena sottolineare che ^ è la convenzione UNIX comune per mostrare "controllo" nel terminale. Ad esempio, se si premesse Ctrl + A e questo dovesse essere ignorato allo stesso modo, verrebbe visualizzato come "^ A". Ctrl + [è in realtà un sinonimo del carattere di escape. Per inciso, cos'è che lo fa accadere in primo luogo; quale software decide di stampare il cursore? È l'emulatore di terminale stesso o qualcos'altro di cui non sono a conoscenza?
Muzer,

@Muzer il kernel stesso esegue la formattazione del cursore dei caratteri ripetuti. La funzione può essere disattivata constty -echoctl

Il nocciolo? Interessante, non sapevo che fosse così profondo (anche se con il senno di poi, avrebbe dovuto essere ovvio, dal momento che succede anche nelle primissime fasi di avvio!).
Muzer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.