Org Agenda: keep the buffer order untouched after saving all modified org buffers
I am managing emails from my Org Agenda. This implies that I save more
often buffers from there. In the Org Agenda buffer the s
key is
bound to org-save-all-org-buffers
, which quickly saves all modified
Org buffers.
A side effect of saving buffers is that the order of buffers changes.
Say you have this order of buffers (tip: you can use the Elisp
function (buffer-list)
to get it):
test.el agenda.org
And you call org-save-all-org-buffers
, then the order changes to
agenda.org test.el
because there was a visit to the Org file for saving.
This is a problem for me because while I am working, I get my buffer order messed up and I get distracted.
The fix is an advice:
(defun ag/reorder-buffer-list (new-list) "https://www.gnu.org/software/emacs/manual/html_node/elisp/Buffer-List.html" (while new-list (bury-buffer (car new-list)) (setq new-list (cdr new-list)))) (defun ag/keep-buffer-list-unaltered (orig-fun &rest args) (let ((buffers (buffer-list)) (result (apply orig-fun args))) (reorder-buffer-list buffers) result)) (advice-add 'org-save-all-org-buffers :around #'ag/keep-buffer-list-unaltered)
The ag/reorder-buffer-list
function orders buffers by exploiting
bury-buffer
side effect to push the buried buffer at the end of the
list. The ag/keep-buffer-list-unaltered
stores the buffers order
before saving buffers and reorder buffers after saving (i.e.,
orig-fun
).
Finally a little advice :around
our org-save-all-org-buffers
saves the day!
Happy saving!