emacs: Init Rebinding

 
 51.3.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 initialization file by writing Lisp code.
 SeeInit File, for a description of the initialization file.
 
    There are several ways to write a key binding using Lisp.  The
 simplest is to use the ‘kbd’ function, which converts a textual
 representation of a key sequence—similar to how we have written key
 sequences in this manual—into a form that can be passed as an argument
 to ‘global-set-key’.  For example, here’s how to bind ‘C-z’ to the
 ‘shell’ command (SeeInteractive Shell):
 
      (global-set-key (kbd "C-z") 'shell)
 
 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’ as a variable.  This probably causes an
 error; it certainly isn’t what you want.
 
    Here are some additional examples, including binding function keys
 and mouse events:
 
      (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)
 
    Instead of using ‘kbd’, you can use a Lisp string or vector to
 specify the key sequence.  Using a string is simpler, but only works for
 ASCII characters and Meta-modified ASCII characters.  For example,
 Ops::):
 
      (global-set-key "\C-x\M-l" 'make-symbolic-link)
 
    To put <TAB>, <RET>, <ESC>, or <DEL> in the string, use the Emacs
 Lisp escape sequences ‘\t’, ‘\r’, ‘\e’, and ‘\d’ respectively.  Here is
 Indentation::):
 
      (global-set-key "\C-x\t" 'indent-rigidly)
 
    When the key sequence includes function keys or mouse button events,
 or non-ASCII characters such as ‘C-=’ or ‘H-a’, you can use a vector to
 specify the key sequence.  Each element in the vector stands for an
 input event; the elements are separated by spaces and surrounded by a
 pair of square brackets.  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.  Function keys are represented by symbols (See
 Function Keys); simply write the symbol’s name, with no other
 delimiters or punctuation.  Here are some examples:
 
      (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:
 
      (global-set-key [?\C-z ?\M-l] 'make-symbolic-link)
 
    Language and coding systems may cause problems with key bindings for
 non-ASCII characters.  SeeInit Non-ASCII.
 
    As described in SeeLocal Keymaps, major modes and minor modes
 can define local keymaps.  These keymaps are constructed when the mode
 is used for the first time in a session.  If you wish to change one of
 these keymaps, you must use the “mode hook” (SeeHooks).
 
    For example, Texinfo mode runs the hook ‘texinfo-mode-hook’.  Here’s
 how you can use the hook to add local bindings for ‘C-c n’ and ‘C-c p’
 in Texinfo mode:
 
      (add-hook 'texinfo-mode-hook
                (lambda ()
                  (define-key texinfo-mode-map "\C-cp"
                              'backward-paragraph)
                  (define-key texinfo-mode-map "\C-cn"
                              'forward-paragraph)))