Ich fing an, einen Nebenmodus zu programmieren, um einige Tastenkombinationen bereitzustellen. Mein erster Versuch hatte einen Tippfehler:
(define-minor-mode borked-mode
"A mode defined with a broken key binding"
nil nil
'(([b] . 'previous-line)))
Ich hatte die Absicht , die verwenden b
Schlüssel, und sofort erkennen , dass ich verwendet habe , sollte "b"
statt [b]
. Also habe ich den Nebenmodus neu definiert:
(define-minor-mode borked-mode
"A mode defined with a broken key binding"
nil nil
'(("b" . 'previous-line)))
Dies hat jedoch nicht funktioniert. Dies brachte mich auf eine wilde Gänsejagd durch die verschiedenen Arten des Bindens von Schlüsseln (dh (kbd ...), [...] usw.). Schließlich wurde mir klar, dass eine einfache Neubewertung des (define-minor-mode ...)
Formulars nichts an der ursprünglichen, kaputten Tastaturbelegung ändern würde. Ich habe dann versucht, die Tastaturbelegung direkt über zu ändern (define-key borked-mode-map ...)
und konnte die korrigierte Tastaturbelegung immer noch nicht laden. Schließlich habe ich Emacs neu gestartet und mein Nebenmodus wurde korrekt geladen.
Meine Frage ist: Wie aktualisieren Sie eine Nebenmodusdefinition, während Sie sie entwickeln? Gibt es eine Möglichkeit, eine defekte Definition zu löschen, oder müssen Sie Emacs neu starten, um defekte Bits zu löschen?
quelle
defvar
wird den Wert nachC-M-x
:) nicht mehr auswerten. Benötigen Siedefparameter
oder eine separatesetf
.define-minor-mode
Makro: Aufrufendefvar
, um die Karte zu definieren. Das zweite Auswerten dieser Defvar hat keine Auswirkung.C-M-x
(eval-defun
) verwenden, umdefvar
die Variable neu zu bewerten , wird sie aktualisiert. Dies ist ein Sonderfall ineval-defun
; Wenn Sieeval-buffer
oder aufrufen,eval-region
wird der vorhandene Wert nicht geändert.C-M-x
imdefvar
Formular nur die Moduszuordnungsvariable selbst aktualisiert wird. Sie müssen sich auchC-M-x
auf demdefine-minor-mode
Formular befinden, um die geänderte Karte in den Nebenmodus zu "installieren". Ich habe versucht, durch Erweitern der Makros herauszufinden, warum, aber es ist mir ein Rätsel.