Terminfo smkx и клавиши курсора приложения против клавиатуры приложения
Последовательности управления XTerm определяют следующие последовательности клавиш:
CSI ? 1 h → Application Cursor Keys (DECCKM)
CSI ? 1 l → Normal Cursor Mode (DECOM)
CSI ? 66 h → Application keypad (DECNKM)
CSI ? 66 l → Numeric keypad (DECNKM)
и исходный формат Terminfo имеет следующую запись:
Variable: keypad_xmit
Capname: smkx
Termcap: ks
Description: Put terminal in "keypad-transmit" mode
Но terminfo для xterm на самом деле говорит smkx=\E[?1h\E=
, что мне кажется смешанным (smkx должен влиять на клавиатуру, а не на клавиши курсора, верно?). Что мне здесь не хватает?
2 ответа
Похоже, вам не хватает \E=
в конце smkx
,
ESC = Application Keypad (DECKPAM).
ESC > Normal Keypad (DECKPNM).
перечислены на странице "Последовательности управления XTerm", и вы ожидаете, что они повлияют на клавиатуру.
Я нашел связанный вопрос здесь: режим передачи с клавиатуры в эмуляторе терминала vt100.
Линия
CSI ? 1 h → Normal Cursor Mode (DECOM)
наверное стоит прочитать
CSI ? 1 l → Normal Cursor Keys (DECCKM)
Есть две escape-последовательности в каждом из smkx
а также rmkx
потому что эти возможности используются в проклятиях, т. е. для keypad
функция.
Страница руководства для ncurses (как и другие) не говорит об этом явно, но эта функция применяется ко всем специальным клавишам на клавиатуре, которые имеют возможность переключаться между обычным и прикладным режимом. Это известная особенность smkx
а также rmkx
Например, в FAQ по xterm Почему я не могу использовать клавиши курсора в (любой) оболочке?,
Специальные клавиши на клавиатуре могут включать эти (в зависимости от типа терминала):
- цифровая клавиатура (справа от клавиатуры ПК)
- клавиатура для редактирования (6 клавиш между основной клавиатурой и цифровой клавиатурой)
- клавиши курсора
- функциональные клавиши (обычно в верхней части клавиатуры ПК)
VT100 (который не имеет функциональных клавиш или клавиатуры редактирования) имеет отдельные escape-последовательности для двух других категорий. В VT220 (эмулируемом xterm) обычный / прикладной режим клавиатуры редактирования является расширением VT100 DECCKM (задокументировано в последовательностях управления XTerm). DEC не определил соответствующую функцию для функциональных клавиш; однако, если бы был какой-то терминал, который поддерживал эту возможность, он, вероятно, использовался бы в smkx
а также rmkx
,