GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Prefix-Keys.html ・ emacs-doc.conao3.com

23.6 プレフィックスキー

プレフィックスキーとは、バインド先がキーマップであるキーシーケンスのことです。キーマップは、プレフィックスキーに続くキーシーケンスをどのように処理するかを定義します。例えば、C-xはプレフィックスキーであり、変数ctl-x-mapにも格納されているキーマップを使用します。このキーマップは、C-xで始まるキーシーケンスのバインドを定義します。

Emacsの標準的なプレフィックスキーの中には、Lispの変数にも存在するキーマップを使用しているものがあります:

プレフィックスキーのキーマップバインディングは、そのプレフィックスキーに続くイベントを参照するために使用されます。(代わりに、関数定義がキーマップであるシンボルが指定される場合もあります。効果は同じですが、そのシンボルがプレフィックスキーの名称として機能します。)したがって、C-x のバインディングはシンボル Control-X-prefix であり、その関数セルには C-x コマンド用のキーマップが格納されています。(同じキーマップが ctl-x-map の値でもあります。)

プレフィックスキーの定義は、任意のアクティブなキーマップに記述できます。C-c、C-x、C-h、ESC のプレフィックスキーとしての定義はグローバルマップに存在するため、これらのプレフィックスキーは常に利用可能です。メジャーモードやマイナーモードでは、ローカルマップまたはマイナーモードのマップにプレフィックスキーの定義を記述することで、キーをプレフィックスとして再定義できます。アクティブキーマップを参照してください。

あるキーが複数のアクティブなマップでプレフィックスとして定義されている場合、それらの定義は実質的に統合されます。まずマイナーモードのキーマップで定義されたコマンドが適用され、次にローカルマップのプレフィックス定義、最後にグローバルマップの定義が適用されます。

以下の例では、ローカルキーマップにおいて C-p をプレフィックスキーとし、C-p が C-x と同一になるように設定します。すると、C-p C-f のバインドは、C-x C-f と同様に関数 find-file となります。対照的に、キーシーケンス C-p 9 はいずれのアクティブなキーマップにも見当たりません。

(use-local-map (make-sparse-keymap))
    ⇒ nil
(keymap-local-set "C-p" ctl-x-map)
    ⇒ (keymap #^[nil nil keymap ...
(keymap-lookup nil "C-p C-f")
    ⇒ find-file
(keymap-lookup nil "C-p 9")
    ⇒ nil
関数: define-prefix-command symbol &optional mapvar prompt

この関数は、symbol をプレフィックスキーのバインドとして使用できるように準備します。具体的には、スパースなキーマップを作成し、それを symbol の関数定義として格納します。その後、キーシーケンスを symbol にバインドすることで、そのキーシーケンスがプレフィックスキーになります。戻り値は symbol です。

この関数はまた、キーマップを値としてsymbolを変数に設定します。ただし、mapvarがnilでない場合は、代わりにmapvarを変数に設定します。

prompt が nil 以外の場合、それがキーマップ全体のプロンプト文字列となります。メニューキーマップの場合は、プロンプト文字列を指定する必要があります(メニューの定義を参照してください)。