IDE風のファイルナビゲータ nav

どうにもdiredでファイルの移動とかを行なうのが面倒だと微妙に思いはじめたので、emacs上でなんか使えるファイラが無いかと探したところ、次のようなものを見つけました。
http://code.google.com/p/emacs-nav

MOONGIFTSさんでも紹介されているようで、開発も活発なようです。
とりあえず試しに導入してみました。

downloadから、最新のソースコードをダウンロードして、tar zxfで展開します。
で、展開されたディレクトリからnav.elのみをロードパスの通った場所にコピーします。

.emacs.elに以下を記述すれば、C-x C-dでnavが左端に表示されます。

(require 'nav)
(global-set-key (kbd "C-x C-d") 'nav)

でとりあえず使ってみたのですが、diredと違いC-p,C-nでなければファイル名間の移動ができません。この点がひどく不満になったので、次のようにキーバインドを書き換えてみました。

;; ファイラをワンキーで移動できるようにする。
(define-key nav-mode-map (kbd "J") 'nav-jump-to-dir)
(define-key nav-mode-map (kbd "H") 'nav-jump-to-home)
(define-key nav-mode-map (kbd "k") 'previous-window-line)
(define-key nav-mode-map (kbd "j") 'next-window-line)
(define-key nav-mode-map (kbd "h") 'nav-go-up-one-dir)
;; 現在指している行がディレクトリなら、その先に移動する。
(define-key nav-mode-map (kbd "l") (lambda () (interactive)
                                                (let ((dir (nav-get-cur-line-str)))
                                                  (if (nav-dir-files-or-nil dir)
                                                      (nav-cd dir)
                                                    nil))))

ついでに、hの場合は一つ上のディレクトリに、ディレクトリ上にカーソルがある状態でlを押すと、そのディレクトリに移動するようにしてみました。結構便利です。

それと、nav.elでは先頭で (require 'cl) をしてしまっているので、これを

(eval-when-compile
  (require 'cl))

と書き換えて、byte compile してしまいましょう。直接 require してしまうと怒られてしまいます。

使用感としては、いくつかのファイルをまとめてオペレーションするならdired、ファイル編集とかをメインにする場合にはnav、といった感じでしょうか。
でも anything-c-source-current-in-dir とかを利用すると、そのディレクトリのファイルを開くだけなら別にいらんなぁ、と思います。
navで別ディレクトリを表示しつつ、なんやかや処理を行うには向いているかもしれません。コピーとか。

それとnavでは、sを押下すると、現在navで表示しているディレクトリをworking directory としてshellを開くことができます。
常に表示させておいて、ちょいちょい利用する感じなんでしょうか。findはanything-c-source-locateあれば特に必要無い気もしますが、findコマンドが直接叩けるようですので、使いようによってはかなり強力かもしれません。

まだ使いはじめなので、もうちょっと使いこんでから再度使用感を書きたいと思います。