Es stellt sich heraus, C-c C-d ist bereits in python-mode
(bis 'python-pdbtrack-toggle-stack-tracking
) gebunden, so dass Sie Ihre Wahl der Tastenkombination nochmals zu besuchen möchten.
Hinweis: Wenn Sie nur eine Lösung ausschneiden/einfügen möchten, springen Sie zum Ende der Antwort. Lesen Sie weiter für eine Erklärung, wie Sie dorthin kommen - falls Sie es wieder tun wollen.
Das Makro ist ein guter Anfang, aber was Sie haben, wird nicht ganz funktionieren. Um etwas, das Sie zu einem Schlüssel binden können, versuchen Mx insert-kbd-macro für das Makro, und Sie erhalten:
(fset 'add-docstring
(lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("def ...unprintable characters...6\"3" 0 "%d")) arg)))
(hm .... nicht druckbare Zeichen, ich kann‘ t schneiden/einfügen in SO, aber Sie können es selbst tun, um das Richtige zu bekommen). Mit ein wenig munging, was Sie zu diesem Äquivalent erhalten:
(fset 'add-docstring
(lambda (&optional arg)
"Keyboard macro."
(interactive "p")
(kmacro-exec-ring-item `(,(kbd "C-r def C-n C-a C-m C-p C-i C-u 6 \" C-u 3 C-b") 0 "%d")
arg)))
dass der erste Schritt ist. Mit dem oben genannten können Sie M-x add-docstring
tun und das gewünschte Verhalten erhalten.
Der nächste Schritt ist, was Sie gefragt haben - wie Sie lokal an Schlüssel binden.Die Dokumentation für keybindings begins here, und für Sie von Interesse ist die Local Keymaps section, was das führt folgende:
(add-hook 'python-mode-hook
(lambda() (define-key python-mode-map (kbd "C-c C-d") 'add-docstring)))
Dies stellt eine anonyme Funktion aufgerufen werden, wenn python-mode
eingeschaltet wird, und diese Funktion ist eine Sache - es richtet die gewünschte Schlüsselbindung in der Keymap speziell für den Python-Modus ein.
Wenn Sie die Keymaps section genau lesen, werden Sie sehen, dass Emacs die Konvention folgt, dass nur Benutzer commads an Cc ein binden sollte, wo ein ist jede untere oder Großbuchstaben (zB Cc dCc TCc p ist vorhanden), und Pakete constrain Modus-spezifische Bindungen an Cc%, wobei % ist jedes Interpunktionszeichen oder Steuertaste (zB Cc CcC-c [C-c C-z).
Also, wenn Sie Ihre Bindung zu C-c d ändern, dann sind Sie so ziemlich garantiert nicht mit irgendwelchen Paketen da draußen zu widersprechen. Die mit Emacs ausgelieferte Version python.el
folgt diesen Konventionen ebenso wie die meisten (alle?) Pakete, die mit Emacs ausgeliefert werden.
Sie werden feststellen, dass ich kbd
verwende, um die Tastenfolgen einzulesen. Es ist tragbar und ich finde es viel einfacher zu lesen.
Es gibt noch weitere Dinge, die Sie tun, könnte dies zu bereinigen:
- setzen die Anpassungen in einer named function
- rewrite the macro in elisp
- Verwendung
eval-after-load
anstelle des Hakens (diese Frage sehen)
Hier ist, was ich für # 1 tun würde, die Ihnen eine handliche Stelle gibt, um andere Anpassungen zu setzen:
Verwenden Sie eine benannte Funktion ist ein wenig sauberer in dem Sie später (remove-hook 'python-mode-hook 'my-python-customizations)
tun können, wenn Sie dies wünschen. Wenn Sie sich den Wert für den Hook ansehen (C-h v python-mode-hook RET), ist es offensichtlich, was aufgerufen wird (die anonyme Funktion ist länger und schwieriger zu lesen).
Für die Bonuspunkte, nachdem Sie den Code in Ihre .emacs
tun geklebt M-x eval-Region, die Emacs wird sagen Sie den Code in der Region zu bewerten. Um die Änderungen in Ihren vorhandenen Python-Puffern zu sehen, müssen Sie lediglich eine neue Python-Datei/einen neuen Puf- fer öffnen, der die für alle Python-Puf- fer übliche Änderung der Tastatureingaben auslöst.
Happy hacken.
Das unvermeidliche Follow-up: Natürlich habe ich diff/ediff benutzt, also bin ich froh, dass die Antworten mich in die richtige Richtung wiesen. –