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

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

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

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


person Steve McKay    schedule 26.07.2015    source источник


Ответы (1)


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

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

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

person melpomene    schedule 26.07.2015
comment
Спасибо! Я нашел ссылку на режим приложения в Интернете, но на странице руководства он называется режимом key_transmit, и я не установил связь. - person Steve McKay; 27.07.2015
comment
Краткие описания возможностей терминала основаны на X/Open, который, в свою очередь, копирует SVr4 — и все это без пояснений. Абзац ниже в функциональных клавишах , вероятно, более полезен для понимания smkx/rmkx. - person Thomas Dickey; 27.07.2015