(Emacs の)キーを再定義するためには、キーマップの(訳注:そのキーに対する) エン トリーを変更します。グローバルキーマップを変更することもでき、 (その場合)この 変更は (そのキーに対し、ローカルな定義を上書きしている場合は徐いて) 全てのバッ ファで有効になります。また、カレントバッファのローカルマップを変更することもで き、 (これは通常)それと同じメジャーモードを用いている全てのバッファのローカル キーマップに影響を及ぼすことになります(訳注:??)。
key が cmd を起動するよう、グローバルに定義する。 (local-set-key key cmd ) key が cmd を起動するよう、ローカルに(現在有効なメジャーモードで)定義 する。
例えば、
(global-set-key "\C-x\C-\\" 'next-line)
は C-x C-\ を 1行下に移動するものに(再)定義します。
キーマップを修正する際、(最も)一般的に用いられる方法は (`.emacs' ファイルのよ うな) Lisp コードで関数 define-key を用いる方法です。 define-key は、キーマッ プ、(キーマップ中の)修正を行なうキー、新しい定義の 3つのアーギュメントを取りま す。
以下に示す関数において、アーギュメント keymap がキーマップでなかったり、アー ギュメント keys がタイプされる文字を表わすストリングでなかったりした場合、エ ラーになります。
セクション 2.6.1 [ストリングタイプ]、ページ 13 で述べたように、 control 文字や メタ文字を示す(特別な) read シンタックスが与えられています。ストリング(中)で は、シンタックス \C- と \M- はそれぞれ "control" と "meta" を意味します。これ らは後に続く文字を修飾するため、ストリング "\M-x" は M-x、"\C-f" は C-f、 "\M-\C-x" と "\C-\M-x" は(両方とも) C-M-x として読み込まれます。
Function: define-key keymap keys definition
この関数は、 keys に対するバインディングを keymap に追加します。 keys のプ レフィックスキーに(別の)キーマップがバインドされている場合、それらに影響を 及ぼす場合もあります。 definition はどんな Lisp オブジェクトでもありえます が、セクション 18.4 [キーバインディングを変更する]、ページ 161 のテーブル にリストしたものが有効なオブジェクトとなります。
definition を返します。 keys のプレフィックスがキーマップでなかったり未定 義の場合、エラーになります。
以下の例において C-p C-f をタイプすると、 (変更された) ctl-x を見て (C-x C-f のように) 関数 foo を実行します。
(setq map (make-sparse-keymap)) => (keymap) (define-key map "\C-f" 'forward-char) => forward-char map
=> (keymap (6 . forward-char)) (define-key map "\C-xf" 'forward-word) => forward-word map => (keymap (24 keymap (102 . forward-word)) (6 . forward-char)) (define-key map "\C-p" ctl-x-map) => [nil ... find-file ... backward-kill-sentence] (define-key map "\C-p\C-f" 'foo) => 'foo map => (keymap (16 . [nil ... foo ... backward-kill-sentence]) (24 keymap (102 . forward-word)) (6 . forward-char))
Function: global-set-key keys definition
この関数は、 (グローバルキーマップに) keys の定義 definition を与えます。
(glocal-set-key keys definition) == (define-key (current-global-map) keys definition)
Function: global-unset-key keys
この関数は、カレントなグローバルキーマップから keys の定義を除きます。この 関数の用途の 1つは、そのキーがプレフィックスの(最初の)キーとして用いられな いよう unset することです。これはそうしないと許されてしまいます。 (別の結 果は??)(この関数はいつ失敗する??)
(glocal-unset-key "\C-l") => nil (glocal-set-key "\C-l\C-l" 'redraw-display) => nil
Function: local-set-key keys definition
この関数は、 (ローカルキーマップに) keys の定義 definition を与えます。
(local-set-key keys definition) == (define-key (current-local-map) keys definition)
Function: local-unset-key keys
この関数は、 (カレントなローカルキーマップから) keys の定義を除きます。
Function: substitute-key-definition olddef newdef keymap
この関数は、 keymap において olddef にバインドされた(全ての)キーに対し olddef を newdef で置き換えます。言い換えると、それが現われる場所で olddef が newdef で置き換えられることになります。
nil を返します。
(setq map '(keymap (?1 . olddef-1) (?2 . olddef-2) (?3 . olddef-1))) => (keymap (49 . olddef-1) (50 . olddef-2) (51 . olddef-1))
(substitute-key-definition 'olddef-1 'newdef map) => nil map => (keymap (49 . newdef) (50 . olddef-2) (51 . newdef))