macroを展開して確認する Emacs EmacsLisp
Emacs Lispで作ったマクロの内容を確認するには macroexpnd
関数を利用する。
試しに with-current-buffer
を展開してみると次のようになった。
(macroexpand '(with-current-buffer "*scratch*" (message (buffer-name))))
(save-current-buffer (set-buffer "*scratch*") (message (buffer-name)))
use-package
を展開して見る結構面白い。
(macroexpand '(use-package s :ensure t))
(progn (use-package-ensure-elpa 's '(t) 'nil) (defvar use-package--warning184 #'(lambda (keyword err) (let ((msg (format "%s/%s: %s" 's keyword (error-message-string err)))) (display-warning 'use-package msg :error)))) (condition-case-unless-debug err (if (not (require 's nil t)) (display-warning 'use-package (format "Cannot load %s" 's) :error)) (error (funcall use-package--warning184 :catch err))))