【发布时间】:2019-11-22 01:51:27
【问题描述】:
我正在尝试扩展嵌套列表结构中的所有宏。 macroexpand-all 几乎可以工作,但跳过(不展开)每个嵌套列表中的第一种形式。
我将其用作 org-agenda-custom-commands 的模板机制。我可以通过宏为多个议程命令生成议程块。这是在 init.el (emacs26.2) 中。 macroexp-all-forms 可以不跳过第一个表单,而是调用 macroexpand-all 嵌套表单。
这里是来自 emacs 文档的一个最小示例:
(defmacro inc (var)
(list 'setq var (list '1+ var)))
这按预期工作(一个宏调用):
ELISP> (macroexpand-all '(inc r))
(setq r
(1+ r))
这也有效(嵌套,但第一种形式不是宏调用):
ELISP> (macroexpand-all '(('foo)(inc r)))
(('foo)
(setq r
(1+ r)))
这不工作(嵌套和第一种形式是宏调用):
ELISP> (macroexpand-all '((inc r)(inc r)))
((inc r)
(setq r
(1+ r)))
这也不工作:
ELISP> (macroexpand-all '((inc r)))
((inc r))
在最后两个示例中,第一次调用 inc 没有展开。我在这里想念什么? 在这种情况下,我怎样才能真正扩展所有宏?
【问题讨论】:
标签: emacs elisp-macro