Go to the first, previous, next, last section, table of contents.

キーバインディングを変更する

(Emacs の)キーを再定義するためには、キーマップの(訳注:そのキーに対する) エン トリーを変更します。グローバルキーマップを変更することもでき、 (その場合)この 変更は (そのキーに対し、ローカルな定義を上書きしている場合は徐いて) 全てのバッ ファで有効になります。また、カレントバッファのローカルマップを変更することもで き、 (これは通常)それと同じメジャーモードを用いている全てのバッファのローカル キーマップに影響を及ぼすことになります(訳注:??)。

(global-set-key key cmd )

      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))


Go to the first, previous, next, last section, table of contents.