- macrostep 20161120.1306(in MELPA)
- interactive macro expander
概要
Lispのマクロはとても強力で、制御構造すら隠蔽できてしまいます。
もちろんelispだって例外ではありません。
マクロは何度も「展開」され、
最終的にはスペシャルフォームと関数のみになります。
マクロは便利さの反面、デバッグが困難になるという代償が伴います。
マクロのデバッグの際には展開の様子を見ていくのがいいです。
マクロがどのように展開されるかについては
macroexpand という関数を使えばわかりますが、
デバッグの際に使おうにもわざわざコピーして貼り付けるのでは面倒です。
macrostep.el は、emacs-lisp-modeのバッファの中で
その場でマクロ展開の様子を見られるようにします。
macrolet や cl-macrolet によるローカルマクロにも対応しています。
elispプログラマならば常備したいところです。
インストール
パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。
(package-initialize) (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ("melpa" . "http://melpa.org/packages/") ("org" . "http://orgmode.org/elpa/")))
初めてmacrostepを使う方は
以下のコマンドを実行します。
M-x package-install macrostep
アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。
M-x package-install package-utils (初めてアップグレードする場合のみ) M-x package-utils-upgrade-by-name macrostep
使い方
C-c eを押してマクロ展開状態にします。
この状態で以下のキーが使えます。
- e - さらに展開
- u - 展開した部分を閉じる
- p - 次のマクロを選択する
- n - 前のマクロを選択する
- q - macrostepを終了する
C-c e e ...と操作すると最終的にはマクロが
すべて展開された状態が見られます。
理解できないマクロを展開するのに使ってみてください。
知ってました?
defunって実はdefaliasで定義されたマクロなんですよ!!
Fig1: 初期状態
Fig2: C-c eでマクロを1段階展開!
Fig3: pやnで次に展開するマクロを選択できる
Fig4: dolistをさらに展開
Fig5: macroletやcl-macroletで定義されたローカルマクロにも対応!
Fig6: C-c eで展開!
設定 150502050134.macrostep.el(以下のコードと同一)
(define-key emacs-lisp-mode-map (kbd "C-c e") 'macrostep-expand)
実行方法
$ wget http://rubikitch.com/f/150502050134.macrostep.el $ emacs -Q -f package-initialize -l 150502050134.macrostep.el
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。