この節では、Emacs におけるキーボード入力に関する Windows 固有の機能について説明します。
MS-Windows プログラムで慣習的に使用されている多くのキーコンビネーション(「キーボードショートカット」として知られる)は、従来の Emacs キーバインドと競合します。(これらの Emacs キーバインドは、Microsoft が設立される何年も前に確立されたものです。)競合の例としては、C-c、C-x、C-z、C-a などが挙げられます。CUA モードを有効にすることで(CUA バインディング を参照)、これらの一部を MS-Windows の意味に近い定義に再設定できます。Emacs を他の Windows アプリケーションと同様に動作させるもう一つのオプション機能として、選択範囲削除モードがあります(リージョンの操作 を参照)。
デフォルトでは、Alt と表記されたキーは Meta
キーとしてマッピングされています。代わりに Alt モディファイアを出力させたい場合は、変数
w32-alt-is-meta に nil
の値を設定してください。
MS-Windowsは、Alt-TABや多数のWindowsキーの組み合わせなど、特定のキーコンビネーションを独自に使用するために予約しています。これらのキーコンビネーションは、Emacsが認識する前にシステムによってインターセプトされます。また、Windows
10では、システムが特定の組み合わせにホットキーを定義していない場合であっても、すべてのWindowsキーの組み合わせがシステムによって予約されており、アプリケーションに伝播することはありません。w32-register-hot-key関数を使用すると、キーシーケンスがWindowsに捕捉されるのではなく、Emacsで認識されるようにできます。ホットキーとして登録されると、そのキーコンビネーションはWindowsで処理される前にシステムの入力キューから取り出され、Windowsにおけるそのキーシーケンスの特別な意味が実質的に上書きされます。この上書きはEmacsがアクティブな場合にのみ有効であり、他のアプリケーションがフォアグラウンドにある場合は、キーは通常通り動作します。
w32-register-hot-key
の引数は、単一の修飾子を持つ単一のキーである必要があり、ベクトル形式であれば define-key
でも許容されます。Control および Shift 修飾子は引数に影響しません。Meta 修飾子は、w32-alt-is-meta が t(デフォルト)である場合は Alt
キーとして解釈され、Super および Hyper 修飾子は w32-lwindow-modifier および w32-rwindow-modifier
のバインドに従って解釈されます。さらに、末尾にダッシュがありキーが指定されていない修飾子は、その修飾子に対して Windows
で定義されているすべてのホットキーを Emacs 優先で上書きすることを示します。
例えば、(w32-register-hot-key [M-tab]) を使えば Emacs
で通常通り M-TAB
を利用できます。具体的には、最上位レベルでポイントにある単語や記号を補完したり、インクリメンタル検索中に以前に検索した文字列に対して現在の検索文字列を補完したりする場合などです。(w32-register-hot-key [s-]) と w32-lwindow-modifier を super
にバインドすると、Windows 独自の Windows キーベースのショートカットがすべて無効になります。43
なお、w32-register-hot-key は関数呼び出し時に w32-[lr]window-modifier の値を確認する点に注意してください。したがって、w32-lwindow-modifier を super
に設定し、次に (w32-register-hot-key [s-r]) を呼び出し、最後に
w32-rwindow-modifier も super に設定することができます。その結果、左 Windows キーと R の組み合わせでは Emacs でその組み合わせにバインドした関数が呼び出され、右 Windows キーと
R の組み合わせでは Windows の Run
ダイアログが開きます。
ホットキーの登録には、常にそのホットキーに対応するすべてのShiftおよびControl修飾キーの組み合わせも含まれます。つまり、s-aをホットキーとして登録すると、S-s-a、C-s-a、C-S-s-aも同時に登録されます。
Windows 98およびMEでは、ホットキーの登録がより制限されています。指定するホットキーは常に完全に指定する必要があり、w32-phantom-key-codeをカスタマイズすることで意図した結果を得ることができます。
関数 w32-unregister-hot-key は、引数のキーシーケンスに対して w32-register-hot-key の効果を打ち消します。
デフォルトでは、CapsLock
キーは通常の文字キーにのみ影響します(小文字を大文字に変換します)。ただし、変数 w32-capslock-is-shiftlock に nil 以外の値を設定すると、CapsLock
キーは文字キー以外のキーにも影響を与えるようになり、あたかも文字キー以外のキーを入力している最中に SHIFT キーを押したかのようになります。
変数 w32-enable-caps-lock に nil の値が設定されている場合、CapsLock
キーは入力されたキーのシフト版ではなく、シンボル capslock を生成します。デフォルト値は
t です。
同様に、w32-enable-num-lock が nil の場合、NumLock キーは記号 kp-numlock を生成します。デフォルトは t
であり、これにより NumLock が期待通りに動作し、テンキーのキーの意味が切り替わります。
変数 w32-apps-modifier は、Apps
キー(通常は右の Alt キーと右の Ctrl
キーの間に位置する)の効果を制御します。その値には、各修飾子に対応する記号 hyper、super、meta、alt、control、shift のいずれか、またはキー apps
として表示させるための nil を指定できます。デフォルトは nil です。
変数 w32-lwindow-modifier は、左 Windows キー(通常は start と Windows ロゴが表示されています)の動作を決定します。その値が nil(デフォルト)の場合、このキーは記号 lwindow
を出力します。これを記号 hyper、super、meta、alt、control、または shift のいずれかに設定すると、それぞれ対応する修飾子が出力されます。同様の変数 w32-rwindow-modifier は右 Windows キーの動作を制御し、w32-scroll-lock-modifier は ScrLock キーに対して同様の制御を行います。これらの変数を nil に設定すると、右 Windows キーは記号 rwindow を、ScrLock は記号 scroll を出力します。ScrLock
に他のアプリケーションと同様の動作(すなわち、キーボード上の Scroll Lock LED
表示の切り替え)を行わせたい場合は、w32-scroll-lock-modifier を t または上記の修飾子記号以外の nil
以外の任意の値に設定してください。
ネイティブの Windows アプリケーションとしてコンパイルされた Emacs は、通常、Alt キーを押すと Windows メニューが呼び出されるという Windows の機能を無効にします。その理由は、Emacs では Alt が Meta として機能するためです。Emacs を使用している際、ユーザーは一時的に Meta キーを押し、その後考えを変えることがよくあります。もしこれが Windows メニューを呼び出す効果を持つと、後続のコマンドの意味が変わってしまいます。多くのユーザーはこれを煩わしく感じています。
w32-pass-alt-to-system に nil 以外の値を設定することで、Alt キーのタップに対する
Windows のデフォルト動作を再度有効にできます。
変数 w32-pass-lwindow-to-system と w32-pass-rwindow-to-system は、それぞれのキーを Windows に渡すか、あるいは
Emacs で吸収するかを決定します。値が nil の場合、そのキーは Emacs
で静かに吸収され、それ以外の場合は Windows に渡されます。これら両方の変数のデフォルト値は t です。これらのキーをそれぞれ Windows に渡すと、通常の動作になります。例えば、Lwindow は Start メニューを開く、といった具合です。
変数 w32-recognize-altgr は、AltGr キー(キーボードに搭載されている場合)、あるいはそれに相当する右 Alt キーと左 Ctrl キーの同時押しが、AltGr キーとして認識されるかどうかを制御します。デフォルトは t で、これはこれらのキーが AltGr
として動作することを意味します。これを nil に設定すると、AltGr またはそれに相当するキーの組み合わせが、Ctrl と
Meta の修飾子の組み合わせとして解釈されます。
MS-Windowsの一部のバージョン(主に東アジア向けにローカライズされたWindows)では、入力メソッドマネージャー(IMM)が利用可能です。これにより、アプリケーションはWindows標準の入力メソッドサービスである入力メソッドエディタ(IME)と通信できるようになります。Emacsは、組み込みの入力メソッドと同様に、利用可能な場合にはIMEを使用して、ユーザーが東アジアの非ASCII文字を入力できるようにします(入力メソッドを参照)。ただし、状況によっては、非ASCII文字を指定するキーシーケンスの一部として入力した単純なASCIIキーをIMEが解釈してしまい、妨げになることがあります。IMEは、w32-set-ime-open-status関数を使用することで、一時的にオフにしてから再度オンにすることができます。
既知の例外が1つあります。ワークステーションをロックするキーコンビネーション Windows-L は、システムによってより低いレベルで処理されます。このため、w32-register-hot-key
ではこのキーコンビネーションを上書きできず、常にコンピュータがロックされます。