Gibt es eine Möglichkeit, ein Emacs-Makro in elisp zu konvertieren, nicht wie das M-x insert-kbd-macro
tut, wird die tatsächliche Aktivität elisp Anweisungen.Konvertieren von Emacs Makro in Elisp
Danke für Ihre Hilfe.
Gibt es eine Möglichkeit, ein Emacs-Makro in elisp zu konvertieren, nicht wie das M-x insert-kbd-macro
tut, wird die tatsächliche Aktivität elisp Anweisungen.Konvertieren von Emacs Makro in Elisp
Danke für Ihre Hilfe.
Nein, tut mir leid. Es gibt keine einfache Möglichkeit, ein Emacs-Makro in elisp zu konvertieren.
Update: Es gab einige Arbeiten an Emacs, um diesen Weg zu beginnen. Siehe this thread als Ausgangspunkt. Es ist immer noch nicht möglich (Juni 2010), aber es gibt Aktivität.
Der erste Grund, den ich mir vorstellen kann, ist der Umgang mit interaktiven Befehlen und das Übersetzen von Tastenanschlägen in richtige Argumente für Funktionen.
Denken Sie an die folgende Sequenz:
Cx b .EM TAB RET
Dieser den Befehl beginnt mit einem Puffer zu wechseln, Typen drei Zeichen verwendet Tabulatorvervollständigung es und RET abschließen zu akzeptieren . Die äquivalente Lisp für das Endergebnis (in einer Emacs-Sitzung, in der der TAB-Abschluss einzigartig ist) ist:
(switch-to-buffer ".emacs")
Denken der Fertigstellung gibt es auch Wechselwirkungen mit Expansion aller Art (dabbrev
, hippie-expand
, etc.).
Ein Ausgangspunkt kann M-x edit-last-kbd-macro sein, die (in meinem Fall) dies zeigt:
;; Keyboard Macro Editor. Press C-c C-c to finish; press C-x k RET to cancel.
;; Original keys: C-x b .em <tab> RET
Command: last-kbd-macro
Key: none
Macro:
C-x b ;; switch-to-buffer
.em ;; self-insert-command * 3
<tab> ;; pabbrev-expand-maybe
RET ;; newline-and-indent
, die mindestens einige der Funktionsnamen gibt. Aber Sie werden sehen, dass RET als 'newline-and-indent
gekennzeichnet ist, was falsch ist, da zum Zeitpunkt der Makroausführung der Minipuffer aktiv ist und die Bindung tatsächlich 'minibuffer-complete-and-exit
ist. In ähnlicher Weise ist die geeignete Bindung für TAB'minibuffer-complete
.
Ich habe ein Paket, das ziemlich genau dies bei https://github.com/Silex/elmacro
Es erlaubt einige Macken hat, aber es funktioniert ziemlich gut ... zum Beispiel das folgende Makro:
F3 C-e M-b M-u C-a C-n F4
generiert die folgende elisp :
(defun upcase-last-word()
"Change me!"
(interactive)
(move-end-of-line 1)
(backward-word 1)
(upcase-word 1)
(move-beginning-of-line 1)
(next-line 1 1))
Danke für das Update, Trey. Sieht interessant aus. – Sahas