2012-12-20 16 views
20

Zum Beispiel Bindung in den Codes der Zen-Codierung, die "Cj" Schatten das normale Verhalten von "Cj" (newline-and-indent)Unset Schlüssel in Emacs

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

Dann, wie kann ich unset dieses Keybinding und Verwendung C-j für newline-and-indent wieder?

Ich versuchte dies, aber es funktioniert nicht:

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

Hat Ideen jemand darüber?

+0

Jeder weiß, warum die 'Add-hook' nicht in diesem Fall zu arbeiten? – darksky

+1

Nayefc: Dieser Code hat keinen Einfluss auf die Tastenbelegung im zencoding-Modus, da der zencoding-Modus ein untergeordneter Modus ist und (wie in der folgenden Antwort gezeigt) local-set-key die Tastenbelegung des Hauptmodus beeinflusst. Minor-Modus-Tastenbelegungen haben Vorrang vor Haupt-Modus-Tastenbelegungen, sodass die unmodifizierte Zencoding-Modus-Bindung weiterhin verwendet wird. – phils

Antwort

29

Die allgemeine Art und Weise einen Schlüssel (für jede keymap) zu lösen ist eine Bindung von nil zu definieren:

(define-key KEYMAP KEY nil) 

Der Einfachheit halber gibt es auch zwei Standardfunktionen für unbinding von der globalen keymap und von den lokalen keymap (das ist normalerweise die Keymap des Hauptmodus).

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

Diejenigen Haushalte sind interaktive Befehle, gemäß ihren jeweiligen Ergänzungen global-set-key und local-set-key.

In Bezug auf Ihre speziellen Beispiel möchten Sie wahrscheinlich so etwas wie folgt aus:

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

Perfekte Antwort, würde ich sagen. – PascalVKooten

+0

99% der Zeit ist genau das, was Sie wollen. Ich bin jedoch gestern gestolpert und habe gedacht, dass ich einen Kommentar abgeben würde, da es immer noch frisch in meinem Kopf ist. Einige Tastenbelegungen haben Standardbindungen, d. H. Jeder Schlüssel, der nicht explizit gebunden ist, setzt standardmäßig einen Befehl anstelle von nichts voraus. In meinem Fall war es isearch-mode-map, das standardmäßig auf isearch-other-meta-char für Schlüssel steht, die mit M- oder ESC beginnen. – jpkotta

+1

Vielleicht sollte das eine ganze Frage sein, aber was ist ein guter Weg, um den Namen der Tastenbelegung herauszufinden, wenn ich nicht bereits weiß, was es ist? –