web-dev-qa-db-ja.com

ttyのhtopにファンクションキーを渡すにはどうすればよいですか?

Tty1でhtopを使用しようとしています。ただし、一部のファンクションキーは正常に機能していないようです。 F1 そして F2 何もせず、 F3 セットアップをトリガーするようです(通常はによってトリガーされるはずです F2)。加えて、 F4 そして F5 動作しません。また、押してみると Esc これらの画面から抜け出すには、2回押す必要があります。

通常の端末(terminator)では、ファンクションキーは正常に機能します。しかし、私は押す必要があります Esc ここでも2回なので、おそらくそれは赤いニシンです。

Tty1でこれらのファンクションキーを使用するにはどうすればよいですか?

編集

Tty1では、 Ctrl+v その後 F1 に F5、など。次の出力が得られます。

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

terminatorでは、

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

これより上のファンクションキーは同等です(例:^[[17~ にとって F6)。

編集2

StéphaneChazelasの コメント に応えて。

  • $TERM tty1でも、私の「通常の」動作中の端末と同じです。 xterm-256color
  • Screenまたはtmuxを使用していません。
  • 私はhtop 1.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~,
9
Sparhawk

設定することにより:

export TERM=xterm-256color

htop(およびtermcapまたはterminfoデータベースを使用する他のすべてのビジュアル端末アプリケーション)に、端末が256色のxtermであり、Linux仮想コンソールではないことを伝えています。

htopは、terminfoデータベースにクエリを実行して、送信される文字のシーケンスを確認します。 F1、 F2...しかしxtermのものが取得されます。

xtermは、Linux仮想コンソールとは異なるシーケンスを送信します。これらのキーは、たとえばinfocmpを使用して手動でterminfoデータベースをクエリすることで確認できます。

$ 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は、ターミナルエミュレーター(xtermterminator)自体によって設定され、Linux仮想コンソールの場合はgettyによって設定されます(linuxである必要があります)。そこ)。

特定のターミナルエミュレータが$TERMに選択した値に満足できない場合は、更新する必要があるターミナルエミュレータの構成です。

4