Почему terminfo[kcuu1] = '\EOA'?

Из того, что я могу сказать, читая terminfo(5), kcuu1 должна быть последовательностью, которую терминал отправляет при нажатии стрелки вверх. Я никогда не видел, чтобы это было что-то, кроме ^[[A (говоря сейчас о cat, испортил настройки терминала и т. д.). Итак, учитывая, что терминалы, которые я использовал (rxvt, gnome-Terminal, iTerm), все по умолчанию имеют значение TERM=xterm, почему не kcuu1 \E[A?

Я вижу, что cuu1 \E[A, но (опять же, из man-страницы), это строка, которую я должен отправить в терминал для перемещения курсора, а не строка, которую терминал отправляет мне.

Кстати это с OS X.

1 ответ

Решение

Стрелка и другие специальные клавиши (terminfo именует их как "клавиатура") отправляют разные коды в зависимости от того, находится ли терминал в "режиме приложения" или нет. Приложение, которое хочет использовать различные k* ключи должны выводить smkx первый (и rmkx в конце восстановить старое поведение).

Вы можете попробовать Ctrl + V Up в vi (или аналогичном терминальном приложении), чтобы увидеть, что Up действительно отправляет \EOA там.

Смотрите эти ссылки для более подробной информации:

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