Emacs:Open Last Closed Buffer

darkroom-modeを使うときは、どのモードのファイルであっても強制的に text-modeで開くように設定している。 当然ながら darkuroom-modeから抜けるときにはもとのモードに戻したい。

もとの major-modeを記憶させておいて restoreすればいいのだが、 auto-save-buffers-enhanced で自動保存しているので、回りくどいことをしなくても一度 Kill-bufferして再び読み込めばよい。

いろいろググって下記の Tipsを見つけた。

原案では、多機能で長いコードになっていましたが、私には必要のない部分は削って dietしました。

;; Open last closed file
(defvar my:recently-closed-buffers nil)

(defun my:close-current-buffer ()
  "Close the current buffer."
  (interactive)
  (setq my:recently-closed-buffers
		(cons (cons (buffer-name) (buffer-file-name)) my:recently-closed-buffers))
  (kill-buffer (current-buffer)))

(defun my:open-last-closed ()
  "Open the last closed file."
  (interactive)
  (find-file (cdr (pop my:recently-closed-buffers))))

ようは、kill-buffer の代りに my:close-current-buffer を使い、再読込したいときに my:open-last-closed すればよいことになる。

darkroom-modeの in/out 設定は以下のようになった。

(leaf darkroom
  :ensure t
  :bind ("<f12>" . my:darkroom-in)
  :config
  (bind-key "<f12>" 'my:darkroom-out darkroom-mode-map)

  (defun my:darkroom-in ()
	(interactive)
	(display-line-numbers-mode 0)
	(setq line-spacing 0.4)
	(darkroom-tentative-mode 1))


  (defun my:darkroom-out ()
	(interactive)
	(darkroom-tentative-mode 0)
	(setq line-spacing 0.1)
	(display-line-numbers-mode 1)
	(my:close-current-buffer)
	(my:open-last-closed)))

つまり、darkroom-outのとき、一度bufferを閉じて(kill-buffer)、再度読み込むという処理をしているわけである。