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 に成功した場合、以下のようになります。

  1. (require 'skk nil t) をする(成功)。
  2. (message "Require success: skk") と出力。
  3. (message "foo") と (message "bar") を実行。

require に失敗した場合、以下のようになります。

  1. (require 'skk) をする(失敗)。
  2. (message "Require error: skk") と出力。

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