5

私はterminfo、自分の端末の左 (右、...) キーの制御シーケンスが何であるかを調べるために使用しているので、次のように便利なもの (左に移動) にマップできますzshrc

typeset -A key
left=${terminfo[kcub1]}
bindkey "$left" backward-char

(これを機能させるには他にもいくつかあります。 sourceを参照してください)。私はいくつかの端末エミュレーターを使用しており、これらの制御シーケンスが変化するため、これは役に立ちます。たとえば、UbuntuでGnomeターミナルを使用sshしてDebianボックスにアクセスし、tmuxその中で使用します...

しかし、terminfo から CTRL+LEFT (および RIGHT...)のキーコードを見つけるにはどうすればよいでしょうか? これらを単語の左/右にマップしたいと思います。

4

1 に答える 1

3

などはcontrolleft-arrow、標準の terminfo 機能ではありません。ncurses はこれらを拡張機能として提供し (端末データベースの説明を参照)、拡張機能の使用方法を知っているアプリケーションはそれらを取得できます。

zsh のソース コードは、terminfo ライブラリのテーブル(利用可能な場合など)を使用することを示唆していstrnamesますが、ncurses はメモリの別の領域に拡張名を実装しています。(terminfo データは 2005 年頃のものです。拡張自体は1999 年のncurses 5.0のものです)。

ただし、zsh は拡張情報を使用して名前を検索しないため、実装は (2018 年現在) 不完全です。ループ配列変数 issue の ZSH に示されている例、たとえば、

for key val in ${(kv)terminfo}; do
    echo "$key -> $val"
done

定義済みの名前のみを指定します。

zsh はtigetstr文字列機能を取得するために使用します。名前を知っている場合 (またはinfocmpのリストx見た場合) は、それをそのterminfo[]配列のインデックスとして使用できます。

xterm+pcfkeys拡張された名前は、端末データベースのエントリの上のコメントにリストされている修飾子の xterm のコードに基づいています。

  • controlleft-arrow"kLFT5"
  • controlright-arrow"kRIT5"
于 2015-07-13T20:58:03.623 に答える