Skip to content

eval-after-load を少し改造

2012/02/28

`eval-after-load’ はそのまま使うには少し勝手が悪いので、マクロを書くと使いやすくなります。
ということは、すでに下記のページに書かれていますね。

自分も上記のページを参考にして同様のマクロを書いていました。
(名前はちょっと変えちゃいましたが)
今回、そのマクロを少しばかり変更したのでメモをかねて書いておきます。

(defmacro eval-after-load-q (file &rest args)
  "\
式にクオートのいらないeval-after-load
ファイル名には文字列かシンボルを与える。

使い方:
(eval-after-load-q 'hoge
  (setq foo \"bar\")
  (message \"huga\"))

(eval-after-load-q \"hoge\"
  (setq foo \"bar\")
  (message \"huga\"))"
  (declare (indent 1))
  `(eval-after-load ,(format "%s" (eval file))
       '(funcall ,(byte-compile `(lambda () ,@args)))))

変更点は次の2つです。

  • ファイル名を `require’ のように、クオートしたシンボルでも指定できるようにした。
    `require’ のような形で書きたかったというだけ。
    文字列よりもシンボルの方が auto-complete.el などコード補完的に有利だったから…。
  • `eval-after-load’ に渡す式がバイトコンパイルされるようにした。
    .elc ファイルを見たときにバイトコンパイルされずに残っているのことを知って、納得できなかっただけ。
    バイトコンパイルしたからといってあまり恩恵は得られないと思う…

どちらもほとんど好みの問題ですし、
マクロ名が -q とか言っておきながらファイル名にクオートがいるところとか、
バイトコンパイルするかどうかにかかわらずマクロ展開時にバイトコンパイルされるところとか、
ツッコミどころが色々とありますが、今はこのようにして使っています。

広告

From → Emacs

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。