ZshのArchLinux Wikiページには、terminfoからキーシーケンスを取得する例があります。
typeset -g -A key
key[Home]="${terminfo[khome]}"
key[End]="${terminfo[kend]}"
...
しかし、どうすれば修飾子付きのものを入手できますか?具体的には、Alt + jおよびAlt + kです。
ありがとうございました。
ncurses
ターミナルデータベースはこれらを定義します(ncurses
FAQの shift-またはcontrol-modifiersを使用するにはどうすればよいですか? を参照してください)。
これのほとんどは、xterm
に対して行われた作業に基づいています(たとえば、 このページ を参照)。
これらは一意の名前です(事前定義された端末名の辞書にないため、zsh
は無視します— Src/Modules/terminfo.c を参照)。たとえば、データを変数に取り込むには、tput
の出力にシェルを割り当てる必要があります。
Altj
のk
やxterm
などの通常のキーに適用される場合、通常は修飾子とは見なされません。
モード( modifyOtherKeys )があり、さまざまな組み合わせのエスケープシーケンスを送信するように指示できます( プログラムでcontrol-Iとタブを区別する方法を参照) ?xterm
FAQ)。
この場合、zsh
はまったく役に立ちません。同様に、端末は結果のテーブルを提供しません(特殊キーを処理します)。カスタマイズされたアプリケーションが必要になります。
メタ機能を念頭に置いているかもしれません。これにはterminfo機能があります(smm
有効にする、rmm
無効にする)。ただし、ほとんどの端末(xterm
を除く)は、これを documented 動作とは異なる方法で実装します。 terminfo(5)
:
端末にシフトキーとして機能する「メタキー」があり、送信される文字の8番目のビットを設定する場合、この事実は
km
で示すことができます。それ以外の場合、ソフトウェアは8番目のビットがパリティであると見なし、通常はクリアされます。この「メタモード」をオンまたはオフにする文字列が存在する場合、それらはsmm
およびrmm
として指定できます。
これは、bash
ドキュメントにある後方定義が原因の1つです(詳細については、 私の回答 を参照してください)。ただし、いずれの場合も、terminfoは、どの文字の前に付けることができるかをスクリプトに伝える情報を保持しません。 Escape。