Character Sequenceに対応するキー入力を調べたい


Bashの対話環境はキーバインドの設定(特定のキー入力に対して特定のコマンドを実行)を行うことができます。現在の設定は`bind
-P`で確認することができます。

しかし、この時のキーの表示(character sequence)はわかりにくいものになっています。 例えば、↑キーのcharacter
sequenceは、`[A`です。 これは以下の手順で確認できます:

  1. 端末上でCtrl+Vを押す。
  2. 続けて↑を押すと、^[[Aと表示される。
  3. ^[はエスケープを表す記号なので気にしない。[Aが↑のcharacter sequenceである。

**質問** : 逆に、与えられたcharacter sequenceがどのようなキー入力に対応するのかを調べるにはどうすればよいのでしょうか?

* * *

動機: なぜこれが知りたいのかというと、私の`.bashrc`には

[code]

    bind '"\e[0A": history-search-backward'
    
[/code]

と書いてあるのですが、この`"\e[0A"`が何のcharacter
sequenceに相当するのかわからなくて困っています。あまり意味がないものなら消してしまいたいのですが....



[code]

    bind '"\e[0A": history-search-backward'
    
[/code]

まず、`\e[0A` はもしかして `\e[OA` ではないでしょうか？

キー入力の確認についてですが、terminal(端末)の制御に terminfo を使用されているとして話を進めます。まず、infocmp
コマンドを実行して現在使用中の端末の設定を確認します。

[code]

    $ infocmp | less
    
[/code]

表示されている内容から、`[A` か `OA` を検索します。

[code]

    cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
    kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
    
[/code]

対応する制御シーケンス名が、`cuu1` か `kcuu1` だと分かるかと思います。

次に、terminfo の man を確認します。

[code]

    $ man terminfo
    
[/code]

そこで `cuu1` を検索すると、カーソルキー(↑)だと分かります。

[code]

    Variable   Cap-  TCap   Description
    String     name  Code
    
    cursor_up  cuu1  up     up one line
    key_up     kcuu1 ku     up-arrow key
    
[/code]

もっとも、この調べ方はかなり煩雑かと思います。また、terminfo ではなく termcap
を使われている場合には当てはまりませんので、ご参考程度までにどうぞ。



[code]

    bind '"\e[0A": history-search-backward'
    
[/code]

まず、`\e[0A` はもしかして `\e[OA` ではないでしょうか？

キー入力の確認についてですが、terminal(端末)の制御に terminfo を使用されているとして話を進めます。まず、infocmp
コマンドを実行して現在使用中の端末の設定を確認します。

[code]

    $ infocmp | less
    
[/code]

表示されている内容から、`[A` か `OA` を検索します。

[code]

    cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
    kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
    
[/code]

対応する制御シーケンス名が、`cuu1` か `kcuu1` だと分かるかと思います。

次に、terminfo の man を確認します。

[code]

    $ man terminfo
    
[/code]

そこで `cuu1` を検索すると、カーソルキー(↑)だと分かります。

[code]

    Variable   Cap-  TCap   Description
    String     name  Code
    
    cursor_up  cuu1  up     up one line
    key_up     kcuu1 ku     up-arrow key
    
[/code]

もっとも、この調べ方はかなり煩雑かと思います。また、terminfo ではなく termcap
を使われている場合には当てはまりませんので、ご参考程度までにどうぞ。

