Next: , Previous: , Up: Reading Input   [Contents][Index]


20.8.3 Modifying and Translating Input Events

Emacsはextra-keyboard-modifiersに合わせて読み取ったすべてのイベントを変更して、read-eventからリターンする前に、(もし適切なら)keyboard-translate-tableを通じてそれを変換します。

Variable: extra-keyboard-modifiers

この変数は、Lispプログラムにキーボード上の修飾キーを“押下”させる。値は文字である。文字の修飾子だけが対象となる。ユーザーがキーボードのキーを押下するたびに、その修飾キーがすでに押下されたかのように処理される。たとえば、extra-keyboard-modifiers?\C-\M-aにバインドした場合、このバインディングのスコープ内にある間、すべてのキーボード入力文字はコントロール修飾とメタ修飾を適用されるだろう。文字?\C-@は0と等価なので、この目的にたいしてはコントロール文字として勘定されないが、修飾無しの文字として扱われる。したがってextra-keyboard-modifiersを0にセットすることにより、すべての修飾をキャンセルできる。

ウィンドウシステムを利用する場合は、この方法によりプログラムが任意の修飾キーを“押下”できる。それ以外はCTLMETAのキーだけを仮想的に押下できる。

この変数は実際にキーボード由来のイベントだけに適用され、マウスイベントやその他のイベントには効果がないことに注意されたい。

Variable: keyboard-translate-table

この端末ローカルな変数はキーボード文字にたいする変換テーブルである。これによりコマンドバインディングを変更することなく、キーボード上のキーを再配置できる。値は通常、文字テーブル、またはnilある(文字列かベクターも指定できるが、時代遅れとされている)

keyboard-translate-tableが文字テーブル(Char-Tablesを参照)の場合、キーボードから読み取られたそれぞれの文字はその文字テーブルを調べる。非nilの値が見つかった場合は、実際の入力文字のかわりにそれを使用する。

この変換は文字が端末から読み取られた後、最初に発生することに注意されたい。recent-keysのような記録保持機能や文字を記録するdribbleファイルは、この変換の後に処理される。

さらに、この変換は入力メソッド(Input Methodsを参照)に文字を提供する前に行われることにも注意されたい。入力メソッド処理の後に文字を変換したい場合は、translation-table-for-input(Translation of Charactersを参照)を使用すること。

Function: keyboard-translate from to

この関数は文字コードfromを文字コードtoに変換するために、keyboard-translate-tableを変更する。 必要な場合は、キーボード変換テーブルを作成する。

以下はC-xでカット、C-でコピー、C-vでペーストを処理するようにkeyboard-translate-tableを使用する例です:

(keyboard-translate ?\C-x 'control-x)
(keyboard-translate ?\C-c 'control-c)
(keyboard-translate ?\C-v 'control-v)
(global-set-key [control-x] 'kill-region)
(global-set-key [control-c] 'kill-ring-save)
(global-set-key [control-v] 'yank)

拡張ASCII入力をサポートするグラフィカルな端末上では、シフトキーとともにタイプすることにより、標準的なEmacsにおける意味をこれらの文字から依然として取得することが可能です。これはキーボード変換が関与する文字とは異なりますが、それらは通常と同じ意味をもちます。

read-key-sequenceのレベルでイベントシーケンスを変換するメカニズムについては、Translation Keymapsを参照してください。