Hinzufügen der Tastaturbindung zum vorhandenen Emacs-Modus

7

Ich versuche meine erste Modifikation von Emacs. Ich nahm ein kleines Tastaturmakro auf und ließ Emacs es als Elis spucken, was folgendes ergab:

%Vor%

Die Suche nach der Emacs-Referenz ergab jedoch, dass C-c C-d bereits im diff-Modus gebunden ist. Ich plane nicht, den Diff-Modus zu benutzen, aber die Zukunft ist unerkennbar und ich möchte mir keine Falle stellen. Daher möchte ich, dass diese Tastenbelegung nur im Python-Modus funktioniert, wo sie mir hilft, Docstrings hinzuzufügen.

In meinem /usr/share/emacs/23.whatever/list/progmodes habe ich python.elc und python.el.gz gefunden. Ich habe python.el.gz entpackt und eine lesbare Version der elisp-Datei bekommen. Jetzt wird die Dokumentation für mich undurchsichtig.

Wie kann ich meine Schlüsselbindung statt global im Python-Modus hinzufügen?

Ist es für Bonuspunkte möglich, die Änderungen im Python-Modus anzuwenden, ohne Emacs neu zu starten oder Dateien zu schließen? Es ist der selbstmodifizierende Editor, ich denke, es gibt eine gute Chance, dass es möglich ist.

    
Brighid McDonnell 12.03.2010, 00:08
quelle

2 Antworten

15

Es stellt sich heraus, dass C-c C-d bereits in python-mode (bis 'python-pdbtrack-toggle-stack-tracking ) gebunden ist. Vielleicht möchten Sie also Ihre Wahl der Schlüsselbindung noch einmal überprüfen.

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 erneut tun möchten.

Das Makro ist ein guter Anfang, aber was Sie haben, wird nicht ganz funktionieren. Um etwas zu erhalten, das Sie an einen Schlüssel binden können, versuchen Sie M-x insert-kbd-macro für dieses Makro, und Sie erhalten:

%Vor%

(hm .... nicht druckbare Zeichen, ich kann nicht in SO schneiden / einfügen, aber Sie können es selbst tun, um das Richtige zu bekommen). Mit etwas Munging ist das, was du bekommst, äquivalent:

%Vor%

Das ist der erste Schritt. Mit dem oben genannten können Sie M-x add-docstring ausführen 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 Tastaturbelegungen beginnt hier , und für Sie von Interesse ist die Abschnitt Lokale Tastenbelegungen , der zu folgendem führt:

%Vor%

Dies richtet eine anonyme Funktion ein, die aufgerufen wird, wenn python-mode aktiviert ist, und diese Funktion macht eine Sache - sie richtet die gewünschte Schlüsselbindung in der Keymap speziell für den Python-Modus ein.

Wenn Sie den Abschnitt Tastaturkürzel genau lesen, werden Sie das tun Beachten Sie, dass Emacs der Konvention folgt, dass nur Benutzer Commads an Cc a binden sollten, wobei a ein beliebiger Klein- oder Großbuchstabe ist (zB Cc d Cc T < Cc p sind alle verfügbar) und Pakete schränken mode-spezifische Bindungen auf Cc% ein, wobei % gilt > ist irgendein Interpunktionszeichen oder Kontrollschlüssel (z. B. Cc Cc Cc < Cc Cz

)

Also, wenn Sie Ihre Bindung zu C-c d ändern, dann ist es ziemlich sicher, dass Sie nicht mit irgendwelchen Paketen draußen kollidieren. Das mit Emacs ausgelieferte python.el folgt diesen Konventionen ebenso wie die meisten (?) Pakete, die mit Emacs ausgeliefert werden.

Sie werden feststellen, dass ich kbd verwendet habe Lies die Schlüsselsequenzen ein. Es ist tragbar und ich finde es viel einfacher zu lesen.

Es gibt noch weitere Dinge, die Sie tun könnten, um dies zu bereinigen:

  1. Setzen Sie die Anpassungen in eine benannte Funktion
  2. überschreiben Sie das Makro in elisp
  3. Verwenden Sie eval-after-load anstelle des Hooks ( Siehe diese Frage)

Hier ist, was ich für # 1 tun würde, was Ihnen einen praktischen Platz für weitere Anpassungen bietet:

%Vor%

Die Verwendung einer benannten Funktion ist etwas sauberer, da Sie später (remove-hook 'python-mode-hook 'my-python-customizations) verwenden können, wenn Sie dies wünschen. Wenn Sie sich den Wert für den Hook ansehen ( Ch 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 do M-x-Evaluierungsregion eingefügt haben, die Emacs mitteilen wird, den Code in der Region auszuwerten. Um die Änderungen in Ihren vorhandenen Python-Puffern zu sehen, müssten Sie nur eine neue Python-Datei / einen Puff öffnen, die die Änderung der Tastatureingaben auslösen würde - was allen Python-Puffern gemeinsam ist.

Happy Hacking.

    
Trey Jackson 12.03.2010, 04:14
quelle
4

Erstens, verwirren Sie nicht mit python.el. Sie möchten Ihre eigene benutzerdefinierte Bindung für den Python-Modus erstellen. Dies geschieht normalerweise in Ihrer Datei .emacs in Ihrem Home-Verzeichnis.

Fügen Sie in dieser Datei etwas wie folgt hinzu (Ich habe das nicht getestet - daher kann es zu Syntaxfehlern kommen und ich benutze Python selbst nicht)

%Vor%

Dies ist mit dem Hakenmechanismus. Es ist eine Funktion, die jedes Mal aufgerufen wird, wenn Sie den Python-Modus aufrufen. Diese Funktion bindet nur C-c C-d an Ihre add-doc-string Funktion.

Diese Antwort ist sehr kurz. Lesen Sie über die .emacs-Datei, Anpassungen und Hooks in der Emacs-Dokumentation.

    
Andrew Stein 12.03.2010 03:51
quelle