Unset key binding in emacs

Hanfei Sun picture Hanfei Sun · Dec 20, 2012 · Viewed 8.9k times · Source

For example, in the codes of zen-coding, the "C-j" shadows the normal behavior of "C-j" (newline-and-indent)

(define-key zencoding-mode-keymap (kbd "C-j") 'zencoding-expand-line)

Then how can I unset this keybinding and use C-j for newline-and-indent again?

I tried this, but it doesn't work:

(add-hook 'html-mode-hook
          (lambda ()
            (progn
              (zencoding-mode)
              (local-set-key (kbd "C-j") 'newline-and-indent))))

Does anyone have ideas about this?

Answer

phils picture phils · Dec 20, 2012

The general way to unbind a key (for any keymap) is to define a binding of nil:

(define-key KEYMAP KEY nil)

For convenience, there are also two standard functions for unbinding from the global keymap and from the local keymap (which is usually the major mode's keymap).

  • (global-unset-key KEY)
  • (local-unset-key KEY)

Those ones are interactive commands, as per their respective complements global-set-key and local-set-key.

As to your specific example, you probably want something like this:

(eval-after-load "zencoding-mode"
  '(define-key zencoding-mode-keymap (kbd "C-j") nil))