EmacsでPerlを書くとき,Flymakeを使うには,PERL5LIBを指定する必要があって,古くから,set-perl5lib.elっていうのが使われてきた.
set-perl5lib.elは,例えば,/a/b/lib/c.pmを開いてるとき,/a/b/libをPERL5LIBに追加してくれる.
しかし,別の場所にGitのsubmoduleがあったりすると,例えば,/a//b/modules/以下にsubmoduleが入ってるとき,これではうまくいかない.
そこで,Gitのリポジトリのrootからのパスを指定して,PERL5LIBに追加するのを書いてみた.
Gitリポジトリのrootからのパスを指定してPERL5LIBに追加する.el — Gist
set-perl5lib-glob-from-git-rootの引数にはPERL5LIBに追加したいディレクトリのGitのリポジトリのrootからのパスを指定する.
lib/以外に,submodule/にいろんなリポジトリが入っていて,t/以下にもlibがある場合,以下のようにする.globも使えるようになってる.
(set-perl5lib-glob-from-git-root "lib") (set-perl5lib-glob-from-git-root "t/lib") (set-perl5lib-glob-from-git-root "modules/*/lib")))
こうすると,ファイルを開くたびにやってくれて便利だけど,内部的にGitのコマンドを叩いて実装しているので,大変重い.
(require 'set-perl5lib-glob-from-git-root) (add-hook 'cperl-mode-hook '(lambda () (setq indent-tabs-mode nil) (set-perl5lib-glob-from-git-root "lib") (set-perl5lib-glob-from-git-root "t/lib") (set-perl5lib-glob-from-git-root "modules/*/lib")))
毎回やる必要は全くないので,Flymakeがなんか変なときとかに,明示的に実行するとよいと思う.
(require 'set-perl5lib-glob-from-git-root) (defun setup-perl5lib () (interactive) (set-perl5lib-glob-from-git-root "lib") (set-perl5lib-glob-from-git-root "t/lib") (set-perl5lib-glob-from-git-root "modules/*/lib"))