C'è un modo per convertire una macro emacs in elisp, non come quello che fa M-x insert-kbd-macro
, l'attività effettiva che diventa istruzioni elisp.Converti la macro di Emacs in Elisp
Grazie per il vostro aiuto.
C'è un modo per convertire una macro emacs in elisp, non come quello che fa M-x insert-kbd-macro
, l'attività effettiva che diventa istruzioni elisp.Converti la macro di Emacs in Elisp
Grazie per il vostro aiuto.
No, mi dispiace. Non esiste un modo banale per convertire una macro emacs in elisp.
Aggiornamento: C'è stato un po 'di lavoro su Emacs per iniziare questo percorso. Vedere this thread come punto di partenza. Non è ancora possibile (giugno 2010), ma c'è attività.
La prima ragione per cui riesco a pensare riguarda i comandi interattivi e la conversione delle sequenze di tasti in argomenti appropriati per le funzioni.
pensi al seguente sequenza:
Cx b .EM TAB RET
Questo inizia il comando per passare a un buffer, tipi di tre caratteri, utilizza completamento TAB per completare e RET accettare . Il lisp equivalente per il risultato finale (in una sessione di emacs in cui il completamento TAB è unico) è:
(switch-to-buffer ".emacs")
Pensando di completamento, ci sono anche interazioni con l'espansione di tutti i tipi (dabbrev
, hippie-expand
, etc.).
Un punto di partenza può essere M-x Edit-last-kbd-macro che (nel mio caso) mostra questo:
;; 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
cui almeno ti dà alcuni dei nomi delle funzioni. Ma vedrai che RET è etichettato come 'newline-and-indent
che non è corretto perché al momento dell'esecuzione della macro, il minibuffer è attivo e il binding è in realtà 'minibuffer-complete-and-exit
. Allo stesso modo, l'associazione corretta per TAB è 'minibuffer-complete
.
ho fatto un pacchetto che permette praticamente esattamente questo a https://github.com/Silex/elmacro
Ha alcune peculiarità ma funziona abbastanza bene ... per esempio, la seguente macro:
F3 C-e M-b M-u C-a C-n F4
genera il seguente 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))
Grazie per l'aggiornamento, Trey. Sembra interessante. – Sahas