Карета квадратної дужки квадратної дужки A ^ [[A - Що це означає?


13

Вибачте, якщо це вже запитували, але я не маю уявлення, як я можу це дізнатися сам - коли я шукаю "^ [[A" в будь-якій пошуковій системі, він ігнорує частину "^ [[" взагалі.

У всякому разі, моє запитання: Іноді в терміналі (на Mac), коли я натискаю клавіші зі стрілками, відображаються символи "^ [[A", "^ [[B", "^ [[C" або "^ [[D" . Я, мабуть, пам’ятаю, як стикався з цим роками тому під час використання (швидше за все) DOS, і я думаю, що це траплялося і набагато частіше.

Чому це відбувається і що вони означають?

Відповіді:


20

Це коди втечі ANSI . Символ ^[представляє символ ESC (escape), наступним [є фактична ліва квадратна дужка, а літера вказує функцію коду евакуації. Esc[Частина називається CSI (Control Sequence Introducer). Отже послідовність CSI Aозначає стрілку вгору, або CUU (CUrsor Up).

У будь-якому випадку ця схема бере свій початок ще з часів терміналу дисплея VT100 (запровадженого в 1978 році). Деякі послідовності виходу, що використовуються VT100, були стандартизовані ANSI на початку 1980-х і з тих пір залишаються загальноприйнятими.

Зазвичай при натисканні клавіш зі стрілками якась програма (скажімо оболонка) прослуховує і може діяти на них. Тож коли ви натискаєте стрілку вгору, вона прокручується назад в історії вашої команди. Однак якщо запущена програма, яка не розуміє послідовностей евакуації клавіш зі стрілками, вони, як правило, повертаються до терміналу, як і будь-яка інша клавіша, на яку ви можете потрапити. Тому ви іноді бачите, ^[[Aчи натискаєте клавішу зі стрілкою вгору.


Варто також зазначити, що ^ є загальною конвенцією UNIX для показу "управління" в терміналі. Наприклад, якщо ви натиснули Ctrl + A, і його слід було б проігнорувати таким же чином, це було б відображено як "^ A". Ctrl + [насправді є синонімом символу втечі. Між іншим, що саме змушує це статися в першу чергу; яке програмне забезпечення вирішує надрукувати каре? Це сам емулятор терміналу чи щось інше, про що я не знаю?
Мюзер

@Muzer саме ядро ​​виконує формат каретки відлунюваних символів. Функцію можна вимкнути зstty -echoctl

Ядро? Цікаво, що я не знав, що це пішло так глибоко (хоча заднім числом, це мало бути очевидним, оскільки це відбувається навіть на дуже ранніх стадіях завантаження!).
Мюзер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.