Я задаюсь вопросом , почему Shift+ Arrow Keyрезультат в одном из A, B, Cили Dбукв.
Почему не другие буквы? Зачем вообще письмо?
Shift + Arrow Keysничего не делает.
Я задаюсь вопросом , почему Shift+ Arrow Keyрезультат в одном из A, B, Cили Dбукв.
Почему не другие буквы? Зачем вообще письмо?
Shift + Arrow Keysничего не делает.
Ответы:
Эмуляторы терминалов, такие как gnome-terminal(«Терминал» в Ubuntu), но также xtermи urxvtназываются «эмуляторами», потому что они воспроизводят поведение старых терминалов, которые были единственным отображением компьютера. Такие терминалы связывались с компьютером по текстовому протоколу и изначально были предназначены для приема только текста. Быстро, необходим больший контроль: как стереть строку? Использовать цвета? Или изменить положение курсора?
Источник: Искусство юзабилити Unix - Интерфейсы командной строки
Escape-последовательности были разработаны для каждого терминала, чтобы делать такие вещи. Они названы побег , потому что они начинают с кодом ASCII убегания: 33. Нет способа напечатать такой символ напрямую, что делает его подходящим для таких последовательностей. Когда мы все еще хотим отобразить этот символ, ^[[используется, и это то, что я буду использовать в моих объяснениях.
Когда терминал получил ^[[A, это означало не «печать ^ [[A», а «пользователь нажал клавишу со стрелкой вверх». Буква «А» здесь совершенно произвольна: это просто буква, с которой все согласились, потому что именно этим пользовался DEC VT-52 и его преемник популярный терминал VT-100.

Источник: DEC VT-52 Руководство по техническому обслуживанию, 1976 г.
Эмуляторы терминалов по-прежнему работают сегодня: в зависимости от $TERMпеременной база данных с именем terminfoотвечает за то, какие коды следует отправлять в оболочку (bash, sh, zsh ...), которая затем отвечает за их понимание и реагирование. им.
Теперь код для Shift+ upвыглядит следующим образом ^[[1;2A: эмулятор терминала отправляет этот код в оболочку, которая пытается интерпретировать, ^[[1;2но ничего не отображает, потому что не знает об этой escape-последовательности. Но Aостается и отображается.
^[[Aимеет смысл, когда я нажимаю клавиши со стрелками во время выполнения процесса на терминале.
cat >/dev/nullзатем набрать, и нажмите Ctrl + C (или Enter, затем Ctrl + D), когда закончите.