Как я могу передать функциональные клавиши htop в tty?

9

Я пытаюсь использовать htopв tty1. Однако некоторые функциональные клавиши работают не так, как обычно. F1и F2ничего не делать, и, F3кажется, запускает настройку (которая обычно запускается F2). К тому же F4и F5не работают. Кроме того, когда я пытаюсь нажать, Escчтобы выйти из этих экранов, я должен нажать его дважды.

В обычном терминале ( terminator) функциональные клавиши работают нормально. Тем не менее, я должен Escдважды нажать здесь, так что, возможно, это красная сельдь.

Как я могу использовать эти функциональные клавиши в tty1?

РЕДАКТИРОВАТЬ

В tty1, если я нажимаю Ctrl+, vзатем F1и F5т.д., я получаю следующий вывод:

^[[[A
^[[[B
^[[[C
^[[[D
^[[[E

В terminator, я получаю

^[OP
^[OQ
^[OR
^[OS
^[[15~

Вышеуказанные функциональные клавиши эквивалентны (например, ^[[17~для F6).

РЕДАКТИРОВАТЬ 2

В ответ на комментарий Стефана Шазеласа .

  • $TERMв tty1 такой же, как и в моем "нормальном", работающем терминале. Это xterm-256color.
  • Я не использую экран или tmux.
  • Я использую htop1.0.3, хотя мое первое редактирование, кажется, указывает на то, что это проблема выше по течению htop.

"Совпадает ли infocmp -L1 | grep key_fто, что эти ключи посылают для вас?

Я не уверен, что вы подразумеваете под «соответствовать тому, что эти ключи посылают для вас», но я выполнил эту команду как в моем обычном терминале, так и в tty1, и вывод был идентичным, как показано ниже.

key_f1=\EOP,
key_f10=\E[21~,
key_f11=\E[23~,
key_f12=\E[24~,
key_f13=\E[1;2P,
key_f14=\E[1;2Q,
key_f15=\E[1;2R,
key_f16=\E[1;2S,
key_f17=\E[15;2~,
key_f18=\E[17;2~,
key_f19=\E[18;2~,
key_f2=\EOQ,
key_f20=\E[19;2~,
key_f21=\E[20;2~,
key_f22=\E[21;2~,
key_f23=\E[23;2~,
key_f24=\E[24;2~,
key_f25=\E[1;5P,
key_f26=\E[1;5Q,
key_f27=\E[1;5R,
key_f28=\E[1;5S,
key_f29=\E[15;5~,
key_f3=\EOR,
key_f30=\E[17;5~,
key_f31=\E[18;5~,
key_f32=\E[19;5~,
key_f33=\E[20;5~,
key_f34=\E[21;5~,
key_f35=\E[23;5~,
key_f36=\E[24;5~,
key_f37=\E[1;6P,
key_f38=\E[1;6Q,
key_f39=\E[1;6R,
key_f4=\EOS,
key_f40=\E[1;6S,
key_f41=\E[15;6~,
key_f42=\E[17;6~,
key_f43=\E[18;6~,
key_f44=\E[19;6~,
key_f45=\E[20;6~,
key_f46=\E[21;6~,
key_f47=\E[23;6~,
key_f48=\E[24;6~,
key_f49=\E[1;3P,
key_f5=\E[15~,
key_f50=\E[1;3Q,
key_f51=\E[1;3R,
key_f52=\E[1;3S,
key_f53=\E[15;3~,
key_f54=\E[17;3~,
key_f55=\E[18;3~,
key_f56=\E[19;3~,
key_f57=\E[20;3~,
key_f58=\E[21;3~,
key_f59=\E[23;3~,
key_f6=\E[17~,
key_f60=\E[24;3~,
key_f61=\E[1;4P,
key_f62=\E[1;4Q,
key_f63=\E[1;4R,
key_f7=\E[18~,
key_f8=\E[19~,
key_f9=\E[20~,
Sparhawk
источник
1
На tty1 в приглашении оболочки нажмите Ctrl+Vзатем F1и посмотрите, что вставлено. Повторите эти действия для F2, F3, F4и F5, а затем сделать то же самое в терминатора. Расскажите нам, что вы видите.
Жиль "ТАК - перестать быть злым"
@ Жиль Вопрос отредактирован.
Sparhawk
Какова ценность $TERMтам? Вы используете экран или tmux? Какая версия htop? Соответствует ли infocmp -L1 | grep key_fто, что эти ключи посылают для вас?
Стефан Шазелас
@ StéphaneChazelas Я редактировал вопрос.
Sparhawk
2
Это должен быть TERM = linux, виртуальная консоль linux вряд ли имеет какое-либо отношение к xterm. getty должен установить $ TERM для вас, вы не должны перезаписывать его.
Стефан Шазелас

Ответы:

4

Установив:

export TERM=xterm-256color

вы говорите htop(и любому другому приложению визуального терминала, которое использует базу данных termcap или terminfo), что ваш терминал представляет собой 256-цветовую xterm, а не виртуальную консоль Linux.

htopзапросит базу данных terminfo, чтобы узнать, какая последовательность символов отправлена F1, F2но получит их xterm.

xtermотправляет последовательности, отличные от виртуальной консоли Linux, для тех ключей, которые вы можете проверить, запросив базу данных terminfo вручную, infocmpнапример:

$ infocmp -L1 xterm-256color | grep 'key_f[1-5]='
        key_f1=\EOP,
        key_f2=\EOQ,
        key_f3=\EOR,
        key_f4=\EOS,
        key_f5=\E[15~,
$ infocmp -L1 linux | grep 'key_f[1-5]='
        key_f1=\E[[A,
        key_f2=\E[[B,
        key_f3=\E[[C,
        key_f4=\E[[D,
        key_f5=\E[[E,

Так htopчто не признают, \E[[Aа F1будут ожидать \EOPэтого.

Здесь вы не хотите назначать значения $TERMв ~/.bashrc. $TERMдолжны быть установлены самими эмуляторами терминала ( xterm, terminator) и gettyвиртуальными консолями для Linux (должны быть linuxтам).

Если вы недовольны значением, которое выбирает конкретный эмулятор $TERMтерминала, вам необходимо обновить эту конфигурацию эмулятора терминала.

Стефан Шазелас
источник
На Mac просто откройте настройки терминала и измените с «ansi» на xterm-256color.
Xeoncross
Спасибо за подробное объяснение. В моем случае KiTTY (форк PuTTY) настраивался $TERMна xterm-256color, но был настроен на использование ESC[n~функциональных клавиш. Я изменил функциональные клавиши для использования XTerm R6в настройках, и теперь все работает.
Алан