Last update: 2023-11-12

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