anything-vcs-project.elというelispを書いた。

https://github.com/podhmo/anything-vcs-project.el

これ何?

バージョン管理システム(git,hg)などで管理されているファイルをanythingからアクセスするためのelisp
(以降バージョン管理システム=VCS)

実際の動作。

  • 現在開いているバッファのディレクトリから、~/.{git,hg}を探す。
    • ~/foo/bar/boo/yee.txtにいる時は、~/foo/bar/boo/.git, ~/foo/bar/.git, ~/foo/.git, ~/.gitを探していく
    • (hgについても同様)
  • 見つかったら、そのVCSが管理しているファイルをanythingで選択して絞り込む
  • 次回からは、開いているバッファがVCSが管理しているバッファでなくても開けるように覚えておく。

便利なのは、gitとhgどちらで管理しているか気にしなくて良いこと。*1

もう少しファイルの選択方法について詳しく説明すると。

ここで、hg,gitなどで管理しているファイル群をプロジェクトと呼ぶことする。ファイルの選択の方法は2種類あって、

  1. 現在のプロジェクトの管理下のファイルから絞り込む
  2. プロジェクトを選択する=>選択したプロジェクトの管理下のファイルから絞り込む

というような感じ。

install

anything.elが必要。anythingが入って入れば

git clone git@github.com:podhmo/anything-vcs-project.el.git
cd anything-vcs-project.el
cp anything-vcs-project.el <emacsのload-pathが通ったディレクトリ>
cp with-prefix.el <emacsのload-pathが通ったディレクトリ>

あと、.emacs以下のように設定を書き足せば良い。

(require 'anything-vcs-project)
;; 見つけたプロジェクトを覚えておくか(基本tの方が便利)
(setq anything-vcs-project:cache-enable-p t)

;; 覚えておくプロジェクトのパス
(setq anything-vcs-project-cache:project-list-path "~/.emacs.d/.project.list")

;; git で管理下ファイルの一覧を取得する時に除去するパターン
(setq anything-vcs-project-git:exclude-args "--exclude .hg")
;; hg で管理下ファイルの一覧を取得する時に除去するパターン
(setq anything-vcs-project-hg:exclude-args "--exclude '*.pyc' --exclude .git")

;; key bind
(global-set-key (kbd "C-c C-:") 'anything-vcs-project)

C-c C-:で使えるようになる。結構便利だと思う。

*1:普通はどちらか一方だけ使うのであまりメリットがないのかも?