2011-05-08 14 views
6

¿Hay un análogo Elisp para la macrostepper BABA? Específicamente, estoy buscando algo que expanda el código en el punto en el siguiente paso de expansión (o simplemente la expansión final) en un nuevo buffer.Emacs Lisp macro paso a paso

La ingenua

(defun macroexpand-point() 
    (interactive) 
    (let ((b (get-buffer-create "*el-macroexpansion*")) 
     (expansion (format "%s" (macroexpand (thing-at-point 'sexp))))) 
    (with-current-buffer b 
     (insert expansion) 
     (display-buffer b)))) 

no hace lo que estoy esperando aquí.

+0

Por curiosidad, ¿qué hace esto exactamente? Realmente no se puede encontrar nada en macro-stepper – PascalVKooten

+0

@Dualinity - Toma la macro llamada elisp en el punto y le muestra el código en el que se expande en un buffer temporal. Si eso aún no tiene sentido, puede que necesite leer en [macros en Lisp] (http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html). – Inaimathi

Respuesta

6

Tal vez usted necesita esto:

(defun macroexpand-sexp-at-point() 
    (macroexpand (sexp-at-point))) 

La función entera puede expresarse más sucintamente lo tanto

(defun macroexpand-point (sexp) 
    (interactive (list (sexp-at-point))) 
    (with-output-to-temp-buffer "*el-macroexpansion*" 
    (pp (macroexpand sexp))) 
    (with-current-buffer "*el-macroexpansion*" (emacs-lisp-mode))) 
2

Uno podría encontrar el macrostep package útil.

howto rápido en macrostep:

Después de instalar el paquete, y sin una mayor personalización, puede hacer esto:

cursor

Mover antes de la expresión que se desea ampliar, y luego hacer M-x macrostep-expand e e e e e para expandirlo paso Por paso. Se muestra un mensaje de ayuda breve en el área de eco sobre cómo salir y cómo desentenderse.

Puede probar esto en los ejemplos de macro ->> de dash.el page, que no son demasiado simples ni demasiado complicados.

Cuestiones relacionadas