require/loadに成功/失敗したらメッセージを出すマクロ
requireやloadに成功したら、その旨のメッセージを出し、失敗したらその旨のメッセージを出すマクロを作ってみました。
重い腰をあげて、.emacsを整理しようと思い立ち、とりあえず、require と load は以下のようなコードにしようと思ったのですが、
一々これを書くのが面倒だったのでマクロを書いてみました。
# 誰かが書いてそうな気もしますが。
(when (require 'foo nil t) ;; require に成功したらこの処理へ ...) (when (load "bar" t) ;; load に成功したらこの処理へ ...)
気になったのは、以下の点です。
- 一々(when (require ...))や(when (load ...))と書いたくない。
- 成功したら、パッケージを読み込めた旨のメッセージを出したい。
- 失敗したら、パッケージの読み込みに失敗した旨のメッセージを出したい。
こんなマクロを書いてみました。トライアンドエラーで書いたので無駄な点が多々あるかもしれません。
(defmacro my-require-and-when (feature &rest body) (declare (indent 1)) `(if (require ,feature nil t) (progn (message "Require success: %s" ,feature) ,@body) (message "Require error: %s" ,feature))) (defmacro my-load-and-when (name &rest body) (declare (indent 1)) `(if (load ,name t) (progn (message "Load success: %s" ,name) ,@body) (message "Load error: %s" ,name)))
このマクロを使うと例えば、以下のように書けます。
(my-require-and-when 'skk (message "foo") (message "bar"))
require に成功した場合、以下のようになります。
- (require 'skk nil t) をする(成功)。
- (message "Require success: skk") と出力。
- (message "foo") と (message "bar") を実行。
require に失敗した場合、以下のようになります。
loadの場合は、requireの場合とほぼ同様に以下のように書きます。
(my-load-and-when "skk" (message "foo") (message "bar"))
昔みたいにもっとブログを書けるといいなあとか思いながら、そんなこんなで。
追記
起きて、ふとみてたら、my-require-and-when内のformatいらねんじゃね?と思い修正
更新時刻
- 2009/11/20/23:55
- 2009/11/21/16:42