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
- 13 Oct 2017: 『テスト駆動開発』
- 19 Oct 2016: 『新装版 達人プログラマー 職人から名匠への道』
- 19 Aug 2016: 『プログラミングElixir』
- 20 Oct 2015: Migrating from git-media to git-lfs
- 04 Oct 2015: Git Large File Storageクライアントのインストール
- 12 Aug 2015: isbn.rb
- 22 Apr 2015: 「なるのか、なすのか?」(To Be Or To Do?)