たまには Emacs ネタを
デフォルトの Emacs は test~ ってな名前であちこちにバックアップファイルを作って鬱陶しい。
backup-directory-alist で保存場所を指定するのもいいのですが、これだと元々のファイルがどこにあったか分からず不便。そこで
(setq backup-by-copying t)
(defadvice make-backup-file-name
(around modify-file-name activate)
(let ((backup-dir "~/backup")) ;; 保存ディレクトリ
(setq backup-dir (expand-file-name backup-dir))
(unless (file-exists-p backup-dir)(make-directory-internal backup-dir))
(if (file-directory-p backup-dir)(let* ((file-path (expand-file-name file))
(chars-alist '((?/ . (?#))(?# . (?# ?#))(?: . (?\;))(?\; . (?\; ?\;))))
(mapchars(lambda (c) (or (cdr (assq c chars-alist)) (list c)))))
(setq ad-return-value(concat backup-dir "/"(mapconcat 'char-to-string
(apply 'append (mapcar mapchars file-path)) "")))) ad-do-it)))
という設定を .emacs.el にすると、ファイル名を絶対パスっぽい名前(/の代わりに#)にして、まとめて一箇所(~/backup)にバックアップされます。
/home/sawa/file.txt → #home#sawa#file.txt
C:\doc\file.txt → c;#doc#file.txt
ちなみに /tmp 以下のファイルはバックアップされない? 謎。
この elisp は大昔に
Meadow掲示板で流れていた物です。
上の記事に対するコメントです
1. sarap (Website) 2009/06/17 10:13