emacs-navでファイルをウィンドウ分割して開けるようにしてみた

近頃Node.jsを書くことが多かったのでエディタはAtomを使っていましたが、どうも重く感じることがあるので最近はEmacsを使っています。

Emacsのファイラはemacs-navを使っています。ファイル構成をツリー状に表示してくれるだけでなく、Emacs上からファイルのコピーやデリート、grepまで出来るすごいやつです。
でも一つ不満があり、ファイルを開く際にvimみたいに画面を分割して新たにファイルを開く機能がないのが不満でした。そのため、「ファイルを開く」→「画面を分割する」のが手間でした。
(どうも昔のnavはあったみたいです。なんでなくなったんだろう?)

探してもなかなか見つからなかったので、自分でnav.elを改造してみました。

1. ここから最新のnavを落とす(現時点で最新はmay 2012になってます)

2. コードを書き足す

(defun nav-open-file-under-cursor-vertically ()
 (interactive)
  (nav-open-file-under-cursor-split 2)
 )

(defun nav-open-file-under-cursor-horizontally ()
 (interactive)
  (nav-open-file-under-cursor-split 1)
 )

(defun nav-open-file-under-cursor-split (k)
  "Finds the file under the cursor."
  (interactive)
  (let ((filename (nav-get-cur-line-str)))
    (nav-open-file-split filename k)))

(defun nav-open-file-split (filename k)
  "Opens a file or directory from Nav."
  (interactive "FFilename:")
  (if (file-directory-p filename)
    (nav-push-dir filename)
    (let ((navdir (or (buffer-file-name) default-directory)))
      (other-window 1)
      (if (equal k 1)
        (split-window-vertically)
        (split-window-horizontally)
        )
      (message navdir)
      (find-file (concat navdir filename))
      )
    ))

3. キーバインドを定義
続いてキーバインドをnav-make-mode-mapに定義します。sで水平分割、vで垂直分割したかったので、

(define-key keymap "s" 'nav-open-file-under-cursor-horizontally)

(define-key keymap "v" 'nav-open-file-under-cursor-vertically)

と定義。

(4. byte-compileとか・・・)



これで簡単に横に並べてファイルを開くことが出来るようになりました。あんまり真面目に作ってないけど、特に不自由なく動きます。格段に便利になった。


追記:2014/6/20
違うディレクトリに動いた時にバグがあったので修正。