Прецедент для привязки клавиш терминала для Windows или Mac Клавиша Cmd

Прецедент для привязки клавиш терминала для Windows или Mac Клавиша Cmd

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

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

решение1

Соглашение об установке 8-го бита при нажатии meta довольно архаично и больше не используется, или вообще не используется в современных терминалах, которые поддерживают больше символов, чем просто 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.

Связанный контент