【Emacs】bm.elの設定例

こんな感じ。

ちなみに、mapc ... で始まる箇所は、バッファ(たち)をdesktop-modeで復元後にbmを復元するための設定である。それゆえ、desktop-modeを使っていないひとには不要な設定である。復元した全バッファに対して処理を回しているので、そもそもbmを置いていないバッファに対しては不要な処理が回っており、非効率であるが、実質的に処理時間は無視できる。

bm-repository に登録されている全ファイルを開く、という設定はお好みで。確かにbm.elは開いていないバッファ(ファイル)に対しては一覧機能が働かない(bm-show-all)ので、それを改善する一つの方策ではある。bm.elの作者にとって何らかの理由があったうえで、bm-show-allの対象がopen済のバッファたちに限定されているのであろう。ちなみにリポジトリでもissueとして挙げられている。

(setq bm-restore-repository-on-load t)
(add-hook 'emacs-startup-hook
          #'(lambda ()
              (require 'bm)
              (setq bm-cycle-all-buffers t)
              (setq-default bm-buffer-persistence t)

              ;; bm-repository に登録されている全ファイルを開く
              ;; http://emacs.rubikitch.com/bm-repository-open/
              ;; (defun bm-find-files-in-repository ()
              ;;   (interactive)
              ;;   (cl-loop for (key . _) in bm-repository
              ;;            when (file-exists-p key)
              ;;            do (find-file-noselect key)))
              ;; (bm-find-files-in-repository)

              ;; ファイルに関連する全バッファを対象にrestore
              (mapc #'(lambda (buf)
                        (with-current-buffer buf
                          (bm-buffer-restore)))
                    (cl-remove-if-not 'buffer-file-name (buffer-list)))
              (add-hook 'find-file-hooks #'bm-buffer-restore)
              (add-hook 'after-save-hook 'bm-buffer-save)
              (add-hook 'after-revert-hook #'bm-buffer-restore)
              (add-hook 'kill-buffer-hook #'bm-buffer-save)
              (add-hook 'kill-emacs-hook #'(lambda ()
                                             (unless noninteractive
                                               (bm-buffer-save-all)
                                               (bm-repository-save))))))