2011-05-08 98 views
6

是否有一個用於SLIME宏篩選器的Elisp模擬器?具體來說,我正在尋找一些將代碼擴展到下一個擴展步驟(或只是最終擴展)的新緩衝區中。Emacs Lisp宏步進器

天真

(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)))) 

沒有做什麼,我很期待在這裏。

+0

出於好奇,這究竟做了什麼?無法在宏步進器上找到任何東西 – PascalVKooten 2012-12-28 08:00:29

+0

@Dualinity - 它在點處接受elisp宏調用,並向您展示它在臨時緩衝區中展開的代碼。如果仍然沒有意義,您可能需要閱讀[Lisp中的宏](http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html)。 – Inaimathi 2012-12-28 14:20:02

回答

6

也許你需要這樣的:

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

全功能可以更succintly表示這樣

(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

有人可能會發現macrostep package有用。

於宏臺階

快速HOWTO:

後您安裝的軟件包,並沒有進一步的定製,你可以這樣做:你要展開的表達式之前

移動光標,然後做M-x macrostep-expand e e e e e將其展開步驟一步一步。簡短幫助信息顯示在回聲區域中,介紹如何退出以及如何取消展開。

可以從dash.el page->>宏的例子中測試一下,它不是太簡單,也不是太複雜。