Почему xterm поддерживает 63 функциональных клавиш?

Рассмотрим два экземпляра вашего предложения, запущенных одновременно. Они оба обнаружат, что доступно (скажем) num = 4, и оба попытаются использовать одно и то же имя цели.

Я не могу сейчас протестировать эту альтернативу, но чего-то вроде этого может быть достаточно

num=1 attempt=10
while ! mv --no-clobber "$1" "${PWD}/DUPES/${num}-$1" && [[ 0 -lt $attempt ]]
do
    num=$((num+1))
    attempt=$((attempt-1))
done
[[ 0 -eq $attempt ]] && echo "ERROR: Too many attempts to handle $1" >&2
5
01.11.2018, 20:16
3 ответа

Это связано со старыми терминалами ASCII DEC, такими как VT220.

http://www.columbia.edu/kermit/k95vtfk.html

Функциональные клавиши использовались для взаимодействия с текстовыми программами, работающими на мейнфреймах.

Соединение между терминалом и мейнфреймом обычно было последовательным.

Нажатие клавиши F заставляло терминал передавать последовательность кодов ASCII, обычно начинающуюся с символа ESC.

Клавиши F были похожи на горячие клавиши в современных компьютерах.

Например, F1 может быть клавишей, вызывающей меню на экране.

Комбинация клавиш Shift и Control вместе с клавишами F будет генерировать F21 -F64

Например, F21 будет сгенерирован нажатием клавиши Shift -F1. (возможно, был Ctrl -F1 )F61 будет чем-то вроде ctrl -shft -F1

2
27.01.2020, 20:33

xterm на самом деле поддерживает гораздо больше, чем 64 функциональные -клавиши (с помощью shift , control , alt , мета модификаторы ). 64 является портативным набором, определенным в terminfo (и частью X/Open Curses). Первым в наборе является kf0(, который сбивает людей с толку, поэтому он редко используется ).

Это происходит потому, что люди хотели иметь возможность различать различные комбинации клавиш (не все пользователи emacs, но это помогает ). Не изобретая совершенно новый набор возможностей terminfo, расширение xterm для использования доступных предопределенных 64 имен terminfo было достаточно хорошим решением.

С ключами ncurses,определяемыми пользователем -, описание терминала xterm имеет больше, чем это, но все же меньше, чем фактический предел. Умножая комбинации, только для 12 клавиш клавиатуры ПК -, это 8 *12 или 16 *12, в зависимости от того, соответствует ли ваша конфигурация alt и мета ..

Тот же набор модификаторов применяется к 4 клавишам курсора и 6 клавишам редактирования -.

Модификаторы, в свою очередь, могут быть модифицированы (, давая различные наборы escape-последовательностей ). Различные строительные блоки в исходном коде xtermterminfoиллюстрируют такие (, как xterm+pcf0 , xterm+pcf1 и т. д. ), умножая возможности.

Но никто не считает...

Кстати, настоящий VT220 ничего (полезного )с первыми 5 функциональными клавишами не делал, по умолчанию. Но это другая история.

Что касается ПК, использование Shift/Control/Alt для модификаторов устарело. В ncurses есть некоторые терминальные описания для OS/2 , использующие этот подход, а также SCO(того же оборудования ).

4
27.01.2020, 20:33

DEC VT представляют собой функциональные клавиши и различные клавиши курсора и редактирования с управляющей последовательностью, называемой DECFNK, которая представляет собой CSI, за которым следуют один или два параметра, за которыми следует ~. Первый параметр — это номер функциональной клавиши. Второй параметр указывает активные состояния клавиши-модификатора.

Что касается DECFNK, может быть до 20 функциональных клавиш. Коды DECFNK для функциональных клавиш с 1 по 20 хорошо -определены и задокументированы.В конце концов, на клавиатурах LK было физически 20 функциональных клавиш. (Даже если несколько функциональных клавиш обычно этого не делают, они могут потенциально генерировать все последовательности DECFNK, и эти последовательности находятся в документе DEC. )Вот клавиатура LK401 для DEC VT420:

An LK401 keyboard

Как видно из вашей таблицы, эмуляторы, создающие исходные последовательности DECFNK, выдают от DECFNK 11 до DECFNK 34 для этих 20 ключей. (Некоторые номера DECFNK пропущены. Интересно, что пропущенные числа соответствуют физическим промежуткам между группами клавиш в ряду функциональных клавиш на клавиатуре.)

Все усложнилось там, где были представлены ПК и XENIX. В мире IBM PC, и в частности PC 3270, на клавиатурах Model F было 24 функциональных клавиши. Расширенная клавиатура PC/AT имела 12 функциональных клавиш, вдвое меньше. Вот клавиатура 3270 Model F:

A 122-key IBM Model F keyboard

Соглашение об эмуляции терминала возникло из-за того, что к функциональным клавишам от F13 до F24 можно было получить доступ с клавиатуры ПК/АТ с помощью комбинаций модификаторов. С четырьмя комбинациями и #x2388; Управление и и #x21e7; Уровень 2 Shift , простые 12 функциональных клавиш на расширенной клавиатуре могут быть созданы для имитации 48 функциональных клавиш. Так было с консолью XENIX, которая генерировала 48 различных управляющих последовательностей.

В других столбцах этой таблицы вы увидите, что именно это и происходит. Управляющие последовательности для (, скажем)F6 , F18 , F30 и F42 , являются DECFNK 17 с разными значениями модификатора. битовые флаги во втором параметре.

Также обратите внимание, что F1 - F5 не являются управляющими последовательностями DECFNK в тех же столбцах. Это снова связано с соглашениями об эмуляторах на клавиатурах ПК. На клавиатурах DEC LKF1 - F5действительно назначали последовательности DECFNK и могли генерировать их, но обычно работали в "локальном" режиме, когда они не генерировали ввод для гостья. Эмуляторам не нужно было генерировать эти последовательности DECFNK и эмулировать от F1 до F5 , потому что, как следствие, мало приложений полагались на эти ключи или вообще не полагались на них; но эмуляторы, наоборот, должны были эмулировать набор клавиш PF1 PF4 , которые были на клавиатуре калькулятора в реальной клавиатуре DEC, но клавиатуры ПК не имеют. Эти клавиши не генерировали последовательности DECFNK и не были настоящими функциональными клавишами. Они генерировали управляющие последовательности SS3, как и другие клавиши калькулятора.

(Некоторые из последовательностей SS3 неправильно сформированы. «SS» означает «Single Shift», и такие сдвиги применяются к одному следующему символу. Последовательности управления XTerm, которые добавляют параметры модификатора к SS3, на самом деле не являются правильно сформированными последовательностями SS3. Настоящие терминалы DEC так не работали. Не сообщалось о модификаторах для управляющих последовательностей клавиш калькулятора.)

Это объясняет, как последовательность управления функциональными клавишами, установленная для эмулируемых терминалов, может доходить до 48 функциональных клавиш. Чтобы объяснить 64 управляющих последовательности, нужно просто обратить внимание на параметр модификатора в последовательностях DECFNK. Для дополнительных 12 управляющих последовательностей это 3, что означает и #x2387; Модификатор Alt .

На самом деле существует 8 возможных комбинаций и #x2388; Управление , и #x21e7; Сдвиг уровня 2 и и #x2387; Альт ; три модификатора, распознаваемые протоколом управляющей последовательности DEC VT. Таким образом, может быть 96 различных управляющих последовательностей DECFNK в соответствии с этими соглашениями об эмуляторе терминала с клавиатуры PC/AT Enhanced и 160 с клавиатуры DEC LK.

Дополнительная литература

6
27.01.2020, 20:33

Теги

Похожие вопросы