Emacsで全バッファを読み直すコマンドmy-revert-all-file-buffers.
バージョン管理システムを使っていて、エディタの外部からファイルを更新した ときに、いちいち全バッファを読み直すのは面倒。探したけどすぐには見つから なかったので書いてみた。
ファイルに関連付けられたバッファだけが対象。 C-uで前置引数を付けると問い合わせなしに実行する。
シェルで
$ svn update
$ git-checkuot foobranch
とかした後にEmacsで
C-u M-x my-revert-all-file-buffers
とするのが典型的な使い方。
一応xyzzyでも動く。そもそもxyzzyは(Windows FSのおかげで)ファイルが更新 されたことを自動で認識するらしいので不要だけど。
(あと、xyzzyの場合はバッファが変更されているとmessage-boxで問い合わせて くるのであまり便利ではない。xyzzyのrevert-bufferは問い合わせをしないオプ ションがないのかな。問い合わせを出しているのは、buffer.lの revert-buffer-normalで使われているread-fileあたりらしい。)
;; uncomment these on xyzzy
;; (defun emacs-version ()
;; (concat (software-type) " " (software-version)))
;; (defun buffer-file-name (&optional buf)
;; (get-buffer-file-name (or buf (selected-buffer))))
;; my-revert-all-file-buffers
(defun my-revert-all-file-buffers (P)
"Revert all visited buffers.
With prefix argument, it will not ask for confirmation."
(interactive "P")
(if (or P (y-or-n-p "Revert all file buffers?"))
(dolist (buf (buffer-list))
(if (not (buffer-file-name buf))
(message (concat (buffer-name buf) " skipped."))
(save-excursion
(set-buffer buf)
(cond ((string-match "Emacs" (emacs-version))
(revert-buffer t t))
((string-match "xyzzy" (emacs-version))
(revert-buffer))
(else (error (emacs-version))))
(message (concat (buffer-name buf) " reverted.")))))
(message "Aborted."))
Other Articles
- 17 Jul 2010 : とちぎテストの会議
- 17 Jul 2010 : 本のテスト(あるいは人間向けソフトウェアのテストについて)
- 16 Jul 2010 : オブジェクト倶楽部2010夏イベント
- 17 May 2010 : 『プログラミングRuby 1.9』近日発行
- 11 Apr 2010 : TOC 2010の資料を読んで
- 20 Mar 2010 : Shibuya.lisp TechTalk #5
- 20 Mar 2010 : 『プログラミングClojure』の編集制作におけるLisp/Scheme