Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unset key binding in emacs

Tags:

emacs

elisp

emmet

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?

like image 836
Hanfei Sun Avatar asked Dec 20 '12 05:12

Hanfei Sun


People also ask

How do I change emacs shortcuts?

You can use global-set-key interactively by calling it with M-x global-set-key . Type the keyboard shortcut you would like to set, then specify the name of the function you would like Emacs to call.


1 Answers

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:

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

For the benefit of other readers trying to do similar things, those arguments are "zencoding-mode" because the library being loaded is named zencoding-mode.el (note that you should omit the ".el" suffix); and zencoding-mode-keymap rather than the typical/expected zencoding-mode-map because zencoding-mode.el is unusual in explicitly declaring its keymap and not using the standard name for it.

Use C-hk to check what the key in question is bound to, and Emacs will tell you both the name of the keymap and the name of the library, which establishes both arguments.

like image 138
phils Avatar answered Sep 19 '22 09:09

phils