ライブラリを遅延ロードするマクロ


特徴

  • 引数一つで動く
  • 複数の関数を同時に autoload にできる
  • ライブラリのロード後に実行する式を書ける(eval-after-load を使う)
  • ライブラリのパスを返す
  • すでに autoload として定義されていれば、重複して定義しない
  • quote して渡す(趣味)


基本的には、このように使う。

(lazy-load-eval 'multi-term)

multi-term が初めて呼ばれた時に multi-term がロードされる。


遅延ロードに使う関数を複数にしたい場合、ライブラリ名と別の関数を使いたい場合は、第二引数にリストとして渡す。

(lazy-load-eval 'multi-term '(multi-term multi-term-dedicated-open))


ライブラリがロードされた後に実行したい式がある場合、第三引数以降に置く。

(lazy-load-eval 'multi-term nil
  (setq multi-term-switch-after-close nil))


このマクロは展開した時ライブラリのパスか、存在しなければ nil を返すようになるため、ライブラリが存在する場合のみ(遅延実行でなくすぐに)実行したい式がある場合、次のように書くことができる。

(when (lazy-load-eval 'multi-term)
  (global-set-key (kbd "C-x C-x C-s") 'multi-term))


参考
http://e-arrows.sakura.ne.jp/2010/03/macros-in-emacs-el.html