私はbashの制御文字の使用を本当に理解していません。色を追加するためにエスケープシーケンスを使用するなどの簡単なことは理解していますが、キーバインディングなどの操作を実行する方法はわかりません.inputrc
。
Shiftaたとえば、このようなものを入力してそれをどのように表現するかを確認する方法はありますか.inputrc
?
この友達がここでやったように: http://linuxart.com/log/archives/2005/10/13/super-useful-inputrc
答え1
参考までに、以下は、archive.org OPの質問にある(死んだ)リンクのコピーです。。表示されるコードは emacs lisp スタイルコードです。私はそれらについてよく知りません。もちろん、猫の皮をむく方法はいくつかありますが、おそらく最も簡単な方法は次のとおりです。
まず、をshowkey -a
使用してキーボードシーケンスの16進表現を取得します。たとえば、を押すと、次のような結果CtrlShift~が表示されます。
^^ 30 0036 0x1e
したがって、私の16進表現はです0x1e
。その後、私のアイテムに1行を追加できます~/.inputrc
。
"\x1e": beginning-of-line
次にbashシェル(またはreadlineを使用するプログラム)を開くと、入力するとカーソルが行の先頭CtrlShift~に移動します。次のこともできます。
"\x1b\x5a": "type this text whenever I press alt+shift+z"
答え2
OPの質問で提起された基本的な質問は、readline(およびbash)の制限を解決する方法です。
- ファンクションキーやカーソルキーなどの特殊キーはしばしばエスケープシーケンスを送信します。
- エスケープシーケンスは、端末と初期化方法によって異なります。
- 端末記述の主な違いの1つは申請方法比較的ノーマルモード。
- アプリケーションモードではカーソルキーを送信できますが
\eOA
(バスの名前をエスケープ文字として使用します)、通常モードでは送信されます\e[A
。 - フルスクリーンアプリケーション(ターミナルデータベースサポート)は通常アプリケーションモードを使用しますが、Linuxコンソールで提供される端末記述などの例外があります。
- 端末記述がアプリケーションモードを使用している場合、端末記述で定義されたキーはシェルに表示される値と一致しません(シェルにその機能がオンになっていないため
smkx
)。
readlineソートはターミナルデータベースに焦点を当てていますが、編集中の行の周りにカーソルを移動できるように、アプリケーションモードと通常モードのキーバインディング情報で役に立つタスクを実行するのに十分ではありません。 readlineを使用するには、使用する各端末に一致するハードコーディングされたエスケープシーケンスを提供する必要があります。もちろん、複数のシーケンスを同じ関数にマッピングできます。幸いなことに、同じシーケンスが衝突して使用されることはほとんどありません。
特殊キーに送信された文字をポータブルにするには、cat -v
コマンドを入力してキーを押して結果を確認します。^[
各エスケープ文字に個別に対応します。他の文字はそのまま使用できます。
さて、showkey
Linux 固有のもので、以下でのみ使用できます。快適。
追加資料:
- 特殊キー(xterm マニュアル)
- キーボードの送信内容をどのように確認できますか?(ncurses FAQ)
- カーソルキーが機能しない(ncurses FAQ)