Next: Modifier Keys, Previous: Rebinding, Up: Key Bindings [Contents][Index]
いつでも使いたいキーバインドがある場合、初期化ファイルにLispコードを記述することにより、それらを指定できます。初期化ファイルの説明については、Init Fileを参照してください。
Lispを使用してキーバインディングを記述するには、いくつかの方法があります。一番簡単なのはkbd
関数を使う方法で、これはキーシーケンスのテキスト表現
— このマニュアルでキーシーケンスを記述するのと同様な方法 —
を、global-set-key
の引数として渡す形式に変換します。たとえば以下は、C-zをshell
コマンド(Interactive Shellを参照してください)にバインドする方法の例です:
(global-set-key (kbd "C-z") 'shell)
コマンド名shell
の前のシングルクォートは、それを変数ではなくシンボル定数としてマークします。クォートを省略した場合、Emacsはshell
を変数として評価しようとします。これはおそらくエラーを引き起こし、もちろんあなたはそれを望まないはずです。
以下に、ファンクションキーやマウスイベントなどを含めた、追加の例を示します:
(global-set-key (kbd "C-c y") 'clipboard-yank) (global-set-key (kbd "C-M-q") 'query-replace) (global-set-key (kbd "<f5>") 'flyspell-mode) (global-set-key (kbd "C-<f5>") 'linum-mode) (global-set-key (kbd "C-<right>") 'forward-sentence) (global-set-key (kbd "<mouse-2>") 'mouse-save-then-kill)
kbd
を使うかわりに、キーシーケンスの指定にLisp文字列やベクターを使用することができます。文字列を使用するのは単純ですが、これはASCII文字とメタ修飾されたASCII文字だけで機能します。たとえば以下は、C-x
M-lをmake-symbolic-link
(Misc File Opsを参照してください)にバインドする方法の例です:
(global-set-key "\C-x\M-l" 'make-symbolic-link)
文字列内にTAB、RET、ESC、DELを記述するには、Emacs
Lispのエスケープシーケンス‘\t’、‘\r’、‘\e’、‘\d’を使用します。以下は、C-x
TABをindent-rigidly
(Indentationを参照してください)にバインドする例です:
(global-set-key "\C-x\t" 'indent-rigidly)
キーシーケンスがファンクションキーやマウスボタンイベント、またはC-=
やH-a
のような非ASCII文字を含む場合、キーシーケンスを指定するのにベクターを使用することができます。ベクター内の各要素は入力イベントを意味します。要素はスペースで区切られ、一対の角カッコ(square
brackets)で囲まれます。ベクターの要素が文字の場合は、それをLisp文字定数、つまり‘?’の後ろにその文字を、文字列内で表記されるような方法で記述します。ファンクションキーはシンボルで表され(Function Keysを参照してください)、他の区切り文字や句読点なしで、単にシンボル名を記述します。以下に例をいくつか示します:
(global-set-key [?\C-=] 'make-symbolic-link) (global-set-key [?\M-\C-=] 'make-symbolic-link) (global-set-key [?\H-a] 'make-symbolic-link) (global-set-key [f7] 'make-symbolic-link) (global-set-key [C-mouse-1] 'make-symbolic-link)
単純な場合でもベクターを使用できます:
(global-set-key [?\C-z ?\M-l] 'make-symbolic-link)
非ASCII文字にたいするキーバインディングは、言語とコーディングシステムに問題を起こすかもしれません。 Init Non-ASCIIを参照してください。
Local Keymapsで説明したように、メジャーモードとマイナーモードはローカルキーマップを定義できます。これらのキーマップは、セッションで最初にそのモードが使用されるときに構築されます。これらのキーマップを変更したい場合は、モードフック(mode hook)を使用しなければなりません(Hooksを参照してください)。
たとえばTexinfoモードは、フックtexinfo-mode-hook
を実行します。以下はTexinfoモードで、C-c
nとC-c pにローカルバインディングを追加するために、どのようにフックを使用できるかの例です:
(add-hook 'texinfo-mode-hook (lambda () (define-key texinfo-mode-map "\C-cp" 'backward-paragraph) (define-key texinfo-mode-map "\C-cn" 'forward-paragraph)))