emacs自動暗号化モードで読み込んで編集するファイル「XXX.gpg」にいくつかのものを保持しています。
場合によっては、ある種のリスクである長時間バッファを閉じるのを忘れることがあります。
バッファが自動的に保存され、(非アクティブな状態で) しばらくすると閉じられるようにしたいと考えています。
run-with-idle-timer
あなたが望むことを正確に行う関数を構築するために使用することができます。
これは私が使用するものです:
(defun dwim-kill-gpg-buffers ()
(interactive)
(let ((buffers-killed 0))
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(when (string-match ".*\.gpg$" (buffer-name buffer))
(let ((current-time (second (current-time)))
(last-displayed-time (second buffer-display-time)))
(when (> (- current-time last-displayed-time)
60)
(message "Auto killing .gpg buffer '%s'" (buffer-name buffer))
(when (buffer-modified-p buffer)
(save-buffer))
(kill-buffer buffer)
(incf buffers-killed))))))
(unless (zerop buffers-killed)
(message "%s .gpg buffers have been autosaved and killed" buffers-killed))))
(run-with-idle-timer 60 t 'dwim-kill-gpg-buffers)
最近表示されたバッファを閉じないようにするため、ビュー切り替えアクティビティがある限り、バッファの強制終了は遅れます。
これを ~/.emacs で使用します。
(run-with-idle-timer 60 t (lambda ()
(let ((victim (get-buffer "XXX.gpg")))
(when victim (message "Killing buffer %s" (buffer-name victim)
(kill-buffer victim))))))