Next: , Previous: Rebinding, Up: Key Bindings


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.