Sunday, March 22, 2009

emacs で全バッファもしくはサブディレクトリ以下の全バッファを再読み込みする

最近Androidアプリを作るためにしかたなくEclipseのIDEを使っているのですが、Emacsを併用して使いたくなります。そこで困るのがファイルの同期をどう取るかです。Eclipseは外部でファイルが編集されると、警告メッセージと共に再読み込みをしてくれるのでEmacsでの変更をEclipseのバッファに反映するのには困りません。しかし、Emacsにはデフォルトではそういう機能がないので簡単なマクロを作ってみました(どちらとも警告なしで再読み込みを行うので注意(:-()。

現在開いている全てのバッファを再読み込み(revert-buffer)するマクロ
revert-all-buffers

;; revert (reload) all buffer which is opened
;; I got this macro from here
;; http://q.hatena.ne.jp/1134532052
(defun revert-all-buffers ()
(interactive)
(let ((cbuf (current-buffer)))
(dolist (buf (buffer-list))
(if (not (buffer-file-name buf)) ;only the file which visit on path
nil
(switch-to-buffer buf)
(revert-buffer t t)))
(switch-to-buffer cbuf)
))


さらにサブディレクトリ以下のファイルを全て再読み込みするマクロ(ただし、diredモード下でカレントディレクトリをうまく取得する方法がわからないのでディレクトリを開いているときには使えない(:-( )

revert-all-subdir-buffers

;; revert all buffers which is subdirectory of current buffer
(defun revert-all-subdir-buffers ()
(interactive)
(let ((cbuf (current-buffer)) (current-dir-name (file-name-directory (buffer-file-name))))
(dolist (buf (buffer-list))
(if (and (buffer-file-name buf) ;only the file which visit on path
(eq 0 (string-match current-dir-name (buffer-file-name buf)))) ;;only match with subdirectory
(progn
(switch-to-buffer buf)
(revert-buffer t t))
nil))
(switch-to-buffer cbuf)
))


問題点としては
・再読み込み前に警告(できれば一括で)を出すようにする。
・revert-all-subdir-buffers が dired モードからでも動作するようにする。

の2点
がんばらねば。

0 Comments:

Post a Comment

<< Home