somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【Emacs】バッファを閉じてもUndo

バッファを閉じてしまうとUndoできなくなってしまいます。それを解決するelispを発見したのでメモしておきます。

インストール

;;; 閉じたバッファも Undo できるようにする
;; (install-elisp "http://cx4a.org/pub/undohist.el")
(require 'undohist)
(undohist-initialize)

patch

残念ながらNTEmacsでは、そのまま使えませんでした。

undohist-save: Opening output file: no such file or directory, c:/usr/home/.emacs.d/undohist/!drive_c!/usr/home/.emacs.d/init.el

undohistディレクトリまでは作成されていました。ググっててみると、undohist.elがNTEmacsで動かなかったので直した - All In-determinate.にて修正を公開されていましたので、それをpatch化しました。

--- C:/usr/home/.emacs.d/auto-install/undohist.el	Thu May 03 21:12:18 2012
+++ C:/usr/home/.emacs.d/auto-install/undohist.el_edit	Thu May 03 21:31:28 2012
@@ -59,13 +59,17 @@
                          "drive_"
                          (char-to-string (downcase (aref file 0)))
                          (if (eq (aref file 2) ?/)
-                             ""
-                           "/")
+                              ""
+                           (if (eq (aref file 2) ?\\)
+                               ""
+                               "/"))
                          (substring file 2))))
   (setq file (expand-file-name
               (subst-char-in-string
                ?/ ?!
-               (replace-regexp-in-string "!" "!!" file))
+               (subst-char-in-string
+                ?\\ ?!
+                (replace-regexp-in-string "!" "!!"  file)))
               undohist-directory)))
 
 (defun undohist-walk-tree (function tree)

無事にundohistに下記ファイルが作成され、バッファを閉じてもUndoできるようになりました。

!drive_c!usr!home!.emacs.d!init.el

しかし、バイトコンパイルできませんでした。なぜだろう・・・。

注意書き

閉じたファイルのアンドゥ履歴を復活するundohist.el - Functional Emacserからの引用です。特にEmacsにまだなれていなくて、他のエディタを使ってしまう人向けです。

ただ、undohistを使っていないEmacsや他のエディタで編集した場合や、sshfsなどでのリモート編集やバージョン管理システムによるリモート変更の適用などでアンドゥ履歴の記録対象のファイルが書き変わった場合は、アンドゥ履歴の整合性が保たれなくなるので、その時点でアンドゥ履歴は破棄されます。