Какова история клавиш Shift + Arrow в терминале?


21

Я задаюсь вопросом , почему Shift+ Arrow Keyрезультат в одном из A, B, Cили Dбукв.

Почему не другие буквы? Зачем вообще письмо?


Интригует: D Моя ставка? Имеет отношение к текстовым играм: D
Rinzwind,

2
Просто наблюдение: в tty Shift + Arrow Keysничего не делает.
Раду Рэдяну

@Rinzwind: :)))
Раду Радеану

1
Я задал этот вопрос на Unix / Linux Stack Exchange. Есть несколько полезных ответов. Может быть, вы хотите посмотреть на них. unix.stackexchange.com/questions/73669/…
yfklon

Ответы:


27

Эмуляторы терминалов, такие как gnome-terminal(«Терминал» в Ubuntu), но также xtermи urxvtназываются «эмуляторами», потому что они воспроизводят поведение старых терминалов, которые были единственным отображением компьютера. Такие терминалы связывались с компьютером по текстовому протоколу и изначально были предназначены для приема только текста. Быстро, необходим больший контроль: как стереть строку? Использовать цвета? Или изменить положение курсора?

Терминал VT-100 Источник: Искусство юзабилити Unix - Интерфейсы командной строки

Escape-последовательности были разработаны для каждого терминала, чтобы делать такие вещи. Они названы побег , потому что они начинают с кодом ASCII убегания: 33. Нет способа напечатать такой символ напрямую, что делает его подходящим для таких последовательностей. Когда мы все еще хотим отобразить этот символ, ^[[используется, и это то, что я буду использовать в моих объяснениях.

Когда терминал получил ^[[A, это означало не «печать ^ [[A», а «пользователь нажал клавишу со стрелкой вверх». Буква «А» здесь совершенно произвольна: это просто буква, с которой все согласились, потому что именно этим пользовался DEC VT-52 и его преемник популярный терминал VT-100.

DEC VT-52 Техническое обслуживание Мануэль 1976

Источник: DEC VT-52 Руководство по техническому обслуживанию, 1976 г.

Эмуляторы терминалов по-прежнему работают сегодня: в зависимости от $TERMпеременной база данных с именем terminfoотвечает за то, какие коды следует отправлять в оболочку (bash, sh, zsh ...), которая затем отвечает за их понимание и реагирование. им.

Теперь код для Shift+ upвыглядит следующим образом ^[[1;2A: эмулятор терминала отправляет этот код в оболочку, которая пытается интерпретировать, ^[[1;2но ничего не отображает, потому что не знает об этой escape-последовательности. Но Aостается и отображается.


5
Вау, интересно. Теперь все это ^[[Aимеет смысл, когда я нажимаю клавиши со стрелками во время выполнения процесса на терминале.
Дан

4
Вы можете нажать CTRL-v непосредственно перед тем, как нажать SHIFT-UpArrow, чтобы «просмотреть» escape-последовательности в необработанном виде. Если вы не изменили значения по умолчанию, ESC должен появиться на экране вашего терминала как ^ [
arielf

@arielf Вы также можете запустить, cat >/dev/nullзатем набрать, и нажмите Ctrl + C (или Enter, затем Ctrl + D), когда закончите.
wjandrea
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.