Почему 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
там.
Смотрите эти ссылки для более подробной информации: