Nawias kwadratowy Caret nawias kwadratowy A ^ [[A - Co to znaczy?

13

Przepraszam, jeśli już o to poproszono, ale nie mam pojęcia, jak sam się o tym przekonać - kiedy wyszukuję „^ [[A” w dowolnej wyszukiwarce, ignoruje to część „^ [[”).

W każdym razie moje pytanie: czasami w terminalu (na komputerze Mac) po naciśnięciu klawiszy strzałek pojawiają się znaki „^ [[A”, „^ [[B”, „^ [[C” lub „^ [[D”] . Wydaje mi się, że pamiętam te lata temu, kiedy korzystałem z (najprawdopodobniej) DOS-a i myślę, że zdarzało się to również znacznie częściej.

Dlaczego tak się dzieje i co one oznaczają?

Phill
źródło

Odpowiedzi:

20

Są to kody ucieczki ANSI . ^[Oznacza ESC (escape) charakter, następny [jest rzeczywiste lewy nawias kwadratowy, a litera wskazuje funkcję kodu ucieczki. Esc[Część jest nazywana CSI (Control Sequence Introducer). Zatem sekwencja CSI Aoznacza strzałkę w górę lub CUU (CUrsor Up).

Zresztą schemat ten sięga czasów terminalu wyświetlającego VT100 (wprowadzonego w 1978 r.). Niektóre sekwencje specjalne stosowane przez VT100 zostały znormalizowane przez ANSI na początku lat 80. XX wieku i od tego czasu pozostają w powszechnym użyciu.

Zwykle po naciśnięciu klawiszy strzałek jakiś program (powiedzmy powłoka) nasłuchuje i może na nie działać. Kiedy więc uderzysz strzałkę w górę, przewinie się ona do historii poleceń. Jednakże, jeśli uruchomiony jest program, który nie rozumie sekwencji ucieczki dla klawiszy strzałek, wtedy zwykle kończą się echem z powrotem do terminala, tak jak każdy inny klawisz, który możesz nacisnąć. Dlatego czasami widzisz, ^[[Aczy naciskasz klawisz strzałki w górę.

Greg Hewgill
źródło
Warto również zauważyć, że ^ jest powszechną konwencją UNIX, która pokazuje „kontrolę” w terminalu. Na przykład, jeśli naciśniesz Ctrl + A, a chcesz go zignorować w taki sam sposób, jak pokazano to jako „^ A”. Ctrl + [jest właściwie synonimem znaku ucieczki. Nawiasem mówiąc, co sprawia, że ​​tak się dzieje; które oprogramowanie zdecyduje się wydrukować daszek? Czy to sam emulator terminala, czy coś innego, czego nie jestem świadomy?
Muzer
@Muzer samo jądro formatuje znaki powtórzone w karetce. Funkcję można wyłączyć za pomocąstty -echoctl
Jądro? Co ciekawe, nie wiedziałem, że poszło tak głęboko (choć z perspektywy czasu powinno to być oczywiste, ponieważ dzieje się to nawet na bardzo wczesnych etapach uruchamiania!).
Muzer,