hitode909の日記

趣味はマリンスポーツですの日記です

Gitリポジトリのrootからのパスを指定してPERL5LIBに追加する.el

EmacsPerlを書くとき,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"))