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
- 23 Feb 2010 : git over ssh with options
- 16 Feb 2010 : TOC 2010の面白そうなトーク
- 13 Feb 2010 : WebDAVサーバの読み書き(クライアント側)
- 25 Jan 2010 : 『プログラミングClojure』のできるまで(編集者サイド)
- 31 Dec 2009 : 2009年のふりかえり
- 27 Dec 2009 : varioref.styを日本語の文書で使う
- 13 Dec 2009 : Thumb Index with LaTeX (smell of NIH)