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

19

Мне интересно, почему Shift + Клавиша со стрелкой приводит к одному из символов A , B , C или D .

Почему не другие буквы? Почему любая буква вообще?

    
задан Dan 23.04.2013 в 17:17
источник

1 ответ

26

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

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

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

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

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

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

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

    
ответ дан Jennifer Wilson 23.04.2013 в 19:51
источник