2015-07-26 10 views
1

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

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

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

ответ

2

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

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

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

+0

Спасибо! Я нашел ссылку на «режим приложения» в Интернете, но справочная страница вызывает его «режим клавиатуры», и я не установил соединение. –

+1

Тесные описания возможностей терминала основаны на X/Open, который, в свою очередь, копирует из SVr4 - все без пояснений. Абзац далее в разделе [функциональные клавиши] (http://invisible-island.net/ncurses/man/terminfo.5.html#h3-Keypad-and-Function-Keys), вероятно, более полезен для понимания smkx/rmkx. –