- load-relative 20170526.310(in MELPA)
- relative file load (within a multi-file Emacs package)
概要
他言語を使っていると、ついその機能が羨しく思ったりするものです。
このパッケージはRubyの
- FILE
- require_relative
をEmacs Lispに移植したものです。
このパッケージを導入するだけで、
自分自身をrequireすることなく以下の関数・マクロが使えます。
- require-relative
- load-relative
- FILE
- provide-me
autoloadに感謝あるのみです。
インストール
パッケージシステムを初めて使う人は
以下の設定を ~/.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/")))
初めてload-relativeを使う方は
以下のコマンドを実行します。
M-x package-install load-relative
アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。
M-x package-install package-utils (初めてアップグレードする場合のみ) M-x package-utils-upgrade-by-name load-relative
FILE
(__FILE__)
で現在読み込んでいるファイル名を返します。
require-relative
(require-relative "foo")
でカレントディレクトリのfoo.elを require します。
シンボルではなくて文字列を使うことに注意してください。
load-relative
require-relativeの load 版です。
(load-relative '("foo" "bar"))
とリストを取ることもできます。
provide-me
通常のprovideは自分自身のbasenameを指定する必要がありますが、
(provide-me)
と書くだけで provide に展開してくれます!
それならば、安心してファイル名を変更できますね!!
使用例
以下のファイル fuga.el と hoge.el を用意してください。
;;; fuga.el (setq fuga 1) (provide-me)
;;; hoge.el (require-relative "fuga") (defun test () (interactive) (message "fuga = %s\n(featurep 'fuga) = %S\n(featurep 'hoge) = %S" fuga (featurep 'fuga) (featurep 'hoge))) (provide-me)
このようにEmacsを起動し、M-x testを実行すると
$ emacs -Q -f package-initialize -l hoge.el
ちゃんとrequireされていることがわかります。
fuga = 1 (featurep 'fuga) = t (featurep 'hoge) = t
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。