texto source programming para for emacs elisp

source - Convertir la macro de Emacs en Elisp



emacs para linux (3)

Hice un paquete que permite casi exactamente esto en https://github.com/Silex/elmacro

Tiene algunas peculiaridades pero funciona bastante bien ... por ejemplo, la siguiente macro:

F3 C-e M-b M-u C-a C-n F4

Genera el siguiente 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))

¿Hay una manera de convertir una macro de emacs en elisp, no como lo hace Mx insert-kbd-macro , la actividad real se convierte en declaraciones elisp.

Gracias por tu ayuda.


No sé si estos comandos se introdujeron más recientemente que los comentarios anteriores, pero puede hacerlo de esta manera:

Asígnele un nombre a la macro del teclado con '' kmacro-name-last-macro '', luego ejecute '' insert-kbd-macro '' que le pide ese nombre e inserta una definición de función en la marca.

Ver: 17.5 Nombrar y guardar macros de teclado


No, lo siento. No hay una forma trivial de convertir una macro de emacs en elisp.

Actualización: Se ha trabajado en Emacs para iniciar este camino. Ver este hilo como punto de partida. Todavía no es posible (junio de 2010), pero hay actividad.

La primera razón que se me ocurre es tratar con comandos interactivos y traducir las pulsaciones de teclas en argumentos adecuados para las funciones.

Piense en la siguiente secuencia:

Cx b .em TAB RET

Esto inicia el comando para cambiar a un búfer, escribe tres caracteres, usa la función TAB para completar y RET para aceptar. La luz equivalente para el resultado final (en una sesión de emacs en la que la finalización de TAB es única) es:

(switch-to-buffer ".emacs")

Pensando en la finalización, también hay interacciones con la expansión de todos los tipos ( dabbrev , hippie-expand , etc.).

Un punto de partida puede ser Mx edit-last-kbd-macro que (en mi caso) muestra esto:

;; 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

Lo que al menos te da algunos de los nombres de funciones. Pero verá que RET está etiquetado como ''newline-and-indent cual es incorrecto porque en el momento de la ejecución de la macro, el minibúfer está activo y el enlace es, de hecho, ''minibuffer-complete-and-exit . Del mismo modo, el enlace correcto para TAB es ''minibuffer-complete .