Hatena::ブログ(Diary)

わからん

2010.12.03

[] anything のバッファ一覧で、同名のファイルはプロジェクト名も表示できるようにした

この記事は Emacs Advent Calendar の3日目です。


anything のバッファ一覧は同名のファイルがあると、区別ができません。しかたなく、C-x C-b したりします。それは uniquify.el を使うと改善されます。しかし、ディレクトリレイアウトによっては情報が足りなかったり、表示が読みにくかったりします。そこで、「プロジェクト名:バッファ名」という形式で表示できる、uniquify_with_project_name.el という拡張を作りました。


たとえば、このようなディレクトリ構造だとすると、

f:id:kitokitoki:20101128173523p:image


uniquify.el だと次のような表示ですが、

f:id:kitokitoki:20101128174347p:image


今回の拡張を導入すると、より判別しやすくなります。

f:id:kitokitoki:20101128174346p:image



uniquify.el と比べたメリットが伝わりにくいサンプルだったかもしれません。uniquify は該当ファイルから違いが生じるまでディレクトリを上がっていくという方式のため、それだけでは判別できない、意図しない結果となることがあるのです。

同じフレームワークで過去に書いたアプリのコードを参考にコーディングをすすめていて、「この settings.yml はどっちのだろう」となる場面がよくあったので、その対策をしました。実装は、uniquify.el の関数を上書きしました。読まないで下さい。積み残しの課題は、同一プロジェクト内の同名ファイルを開いた場合の扱いです。


インストールと設定について解説します。github に置いてあるソースコードをロードパスの通ったところに配置し次のように設定します。uniquify.el は emacs に標準添付されています。uwpn-project-root-alist という連想リストの左側にプロジェクトのトップディレクトリへの絶対パスを指定します。最後にスラッシュを付けてはいけません。右側はバッファ一覧で表示する名前です。uwpn-project-root-alist を設定したあとに、(require 'uniquify_with_project_name) します。以上で、設定したプロジェクトの同名のファイルを開いた場合は、先程のような表示になります。

(require 'uniquify)
(setq uniquify-buffer-name-style 'post-forward)

(setq uwpn-project-root-alist
      '(("/opt/t/prj1" . "プロジェクトA")  ;パスは最後にスラッシュを付けないこと
        ("/opt/t/prj2" . "プロジェクトB")  ;プロジェクトA などと書いているところは絞り込みしやすい名前にするべきです
        ;; ("" . "")
        ))

(require 'uniquify_with_project_name)

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

Google
Connection: close