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,

Другие вопросы по тегам