Я задаюсь вопросом , почему 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), когда закончите.