Skip to main content

22.15 Commands for Binding Keys

This section describes some convenient interactive interfaces for changing key bindings. They work by calling define-key.

People often use global-set-key in their init files (see Init File) for simple customization. For example,

(global-set-key (kbd "C-x C-\\") 'next-line)

or

(global-set-key [?\C-x ?\C-\\] 'next-line)

or

(global-set-key [(control ?x) (control ?\\)] 'next-line)

redefines C-x C-\ to move down a line.

(global-set-key [M-mouse-1] 'mouse-set-point)

redefines the first (leftmost) mouse button, entered with the Meta key, to set point where you click.

Be careful when using non-ASCII text characters in Lisp specifications of keys to bind. If these are read as multibyte text, as they usually will be in a Lisp file (see Loading Non-ASCII), you must type the keys as multibyte too. For instance, if you use this:

(global-set-key "ö" 'my-function) ; bind o-umlaut

or

(global-set-key ?ö 'my-function) ; bind o-umlaut

and your language environment is multibyte Latin-1, these commands actually bind the multibyte character with code 246, not the byte code 246 (M-v) sent by a Latin-1 terminal. In order to use this binding, you need to teach Emacs how to decode the keyboard by using an appropriate input method (see Input Methods in The GNU Emacs Manual).

command global-set-key key binding

This function sets the binding of key in the current global map to binding.

(global-set-key key binding)

(define-key (current-global-map) key binding)

command global-unset-key key

This function removes the binding of key from the current global map.

One use of this function is in preparation for defining a longer key that uses key as a prefix—which would not be allowed if key has a non-prefix binding. For example:

(global-unset-key "\C-l")
⇒ nil
(global-set-key "\C-l\C-l" 'redraw-display)
⇒ nil

This function is equivalent to using define-key as follows:

(global-unset-key key)

(define-key (current-global-map) key nil)

command local-set-key key binding

This function sets the binding of key in the current local keymap to binding.

(local-set-key key binding)

(define-key (current-local-map) key binding)

command local-unset-key key

This function removes the binding of key from the current local map.

(local-unset-key key)

(define-key (current-local-map) key nil)