Терминалы Unix отправляют коды ASCII ниже 32 для Ctrl + еще одна клавиша и имеют как минимум два способа отправки "мета" (то есть либо префикс кода 27, либо установка старшего бита символа ASCII). Есть ли прецедент для способа кодирования использования других клавиш-модификаторов, таких как "super" или клавиши с логотипом Windows или клавиши Mac Cmd ?

Я хотел бы отобразить клавиши со стрелками Cmd+ в iTerm2, но я не знаю, какие коды им назначать. Я уже использую клавишу Option для "мета" со стрелками.

1 ответ1

0

Соглашение об установке 8-го бита при нажатии мета довольно архаично и больше не используется, или вообще не используется ни в каком современном терминале, который поддерживает больше символов, чем просто ASCII. В этом отношении соглашение о префиксе ESC также встречается редко.

32 управляющих символа ASCII действительно отправляются как управляющие символы ASCII (кодовые точки меньше 32), но это охватывает только Ctrl- @, Ctrl-A - Ctrl-Z, ESC, Ctrl-\, Ctrl-], Ctrl- ^ и Ctrl-_. Ничего другого, например, например, Ctrl-4, не существует в ASCII, и не существует соглашения для отправки его через терминал.

По сути, нижняя строка такова: все, что не может быть отправлено в виде простого символа (то есть существует в Unicode для современных терминалов, поддерживающих Unicode), должно быть отправлено как escape-последовательность. Escape-последовательности определяются действующим протоколом эмуляции терминала. Почти все протоколы эмуляции терминала, используемые сегодня, основаны на VT100 или похожи на него, а escape-последовательности доступны для общих клавиш, которые не существуют в виде символов: клавиш со стрелками, функциональных клавиш и т.д.

VT100 и соответствующие протоколы эмуляции терминала не содержат соглашений для передачи нажатий клавиш-модификаторов, даже стандартных, таких как Shift и Control. Программное обеспечение, работающее на tty, не может определить разницу между нажатием клавиши Enter и Shift-Enter. Он даже не может определить разницу между нажатием клавиши Enter и нажатием клавиши Control-M.

Тот факт, что эти последовательности модификаторов не могут быть переданы через терминал, можно считать хорошей вещью. Например, терминальное приложение MacOS может требовать нажатия клавиши ⌘V для собственного использования (вставки), потому что оно все равно не может быть отправлено на tty.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .