57.4.6 Rebinding Keys in Your Init File
If you have a set of key bindings that you like to use all the time,
you can specify them in your .emacs file by using their Lisp
syntax. (See Init File.)
The simplest method for doing this works for ASCII characters and
Meta-modified ASCII characters only. This method uses a string to
represent the key sequence you want to rebind. For example, here's how
to bind C-z to shell
:
(global-set-key "\C-z" 'shell)
This example uses a string constant containing one character,
C-z. (‘\C-’ is string syntax for a control character.) The
single-quote before the command name, shell
, marks it as a
constant symbol rather than a variable. If you omit the quote, Emacs
would try to evaluate shell
immediately as a variable. This
probably causes an error; it certainly isn't what you want.
Here is another example that binds the key sequence C-x M-l:
(global-set-key "\C-x\M-l" 'make-symbolic-link)
To put <TAB>, <RET>, <ESC>, or <DEL> in the
string, you can use the Emacs Lisp escape sequences, ‘\t’,
‘\r’, ‘\e’, and ‘\d’. Here is an example which binds
C-x <TAB>:
(global-set-key "\C-x\t" 'indent-rigidly)
These examples show how to write some other special ASCII characters
in strings for key bindings:
(global-set-key "\r" 'newline) ;; <RET>
(global-set-key "\d" 'delete-backward-char) ;; <DEL>
(global-set-key "\C-x\e\e" 'repeat-complex-command) ;; <ESC>
When the key sequence includes function keys or mouse button events,
or non-ASCII characters such as C-=
or H-a
, you must use
the more general method of rebinding, which uses a vector to specify the
key sequence.
The way to write a vector in Emacs Lisp is with square brackets around
the vector elements. Use spaces to separate the elements. If an
element is a symbol, simply write the symbol's name—no other
delimiters or punctuation are needed. If a vector element is a
character, write it as a Lisp character constant: ‘?’ followed by
the character as it would appear in a string.
Here are examples of using vectors to rebind C-= (a control
character not in ASCII), C-M-= (not in ASCII because C-=
is not), H-a (a Hyper character; ASCII doesn't have Hyper at
all), <F7> (a function key), and C-Mouse-1 (a
keyboard-modified mouse button):
(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)
You can use a vector for the simple cases too. Here's how to
rewrite the first six examples above to use vectors:
(global-set-key [?\C-z] 'shell)
(global-set-key [?\C-x ?l] 'make-symbolic-link)
(global-set-key [?\C-x ?\t] 'indent-rigidly)
(global-set-key [?\r] 'newline)
(global-set-key [?\d] 'delete-backward-char)
(global-set-key [?\C-x ?\e ?\e] 'repeat-complex-command)
As you see, you represent a multi-character key sequence with a vector
by listing all of the characters in order within the square brackets that
delimit the vector.
Language and coding systems can cause problems with key bindings
for non-ASCII characters. See Non-ASCII Rebinding.