たまには 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掲示板で流れていた物です。
07:08PM | コメントを書く ・ TrackBack (0)
最近のコメント