undohist 20150315.542(in MELPA)
Persistent undo history for GNU Emacs

概要

undohist.el はEmacsの undoを永続化 します。

通常のEmacsはファイルバッファを閉じると
undoの履歴もクリアされるので戻せなくなってしまいます。

つまり、ファイルを閉じてもEmacsを再起動してもC-/で元に戻せます。

ぐぐってみたらNTEmacsで動作しない とのことなので、
修正を引用しました。

以下の方法で動作確認できます。

  1. 適当なファイルを開く
  2. 変更する
  3. ファイルバッファを削除する
  4. 再びファイルを開く
  5. C-/を押すと2の変更を取り消せる!!!

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてundohistを使う方は
以下のコマンドを実行します。

M-x package-install undohist

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name undohist

設定 150321052351.undohist.el(以下のコードと同一)

(require 'undohist)
(undohist-initialize)
;;; 永続化を無視するファイル名の正規表現
(setq undohist-ignored-files
      '("/tmp/"))
;;; NTEmacsだと動かないらしいので再定義
;;; http://d.hatena.ne.jp/Lian/20120420/1334856445
(when (eq system-type 'windows-nt)
  (defun make-undohist-file-name (file)
    (setq file (convert-standard-filename (expand-file-name file)))
    (if (eq (aref file 1) ?:)
        (setq file (concat "/"
                           "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
                 ?/ ?!
                 (subst-char-in-string
                  ?\\ ?!
                  (replace-regexp-in-string "!" "!!"  file)))
                undohist-directory))))

実行方法

$ wget http://rubikitch.com/f/150321052351.undohist.el
$ emacs -Q -f package-initialize -l 150321052351.undohist.el


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。