[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bug: org-archive-subtree-save-file-p logic [9.3.6 (release_9.3.6-399
From: |
No Wayman |
Subject: |
Re: Bug: org-archive-subtree-save-file-p logic [9.3.6 (release_9.3.6-399-ge6df03 @ /home/n/.emacs.d/straight/build/org/)] |
Date: |
Mon, 06 Apr 2020 12:49:36 -0400 |
User-agent: |
mu4e 1.3.10; emacs 28.0.50 |
Kyle Meyer <address@hidden> writes:
Based on the history above, I believe the main purpose is to
give users
a way to reverse the "no saving" behavior made in 63f6e851b (Do
not save
target buffer after archiving subtree, 2017-11-25). I'm
_guessing_
that, on top of that, the idea adding a from-agenda value was
that some
users may want to save only when archiving from the agenda,
because in
that case they're a bit removed from the buffer and might not
think to
save it, or something along those lines.
Assuming what I said above is true, I think what you propose
here loses
the ability to save only when archiving from the agenda. And
more
importantly, users would not be able to give a blanket "don't
save" in
order to retain the behavior introduced by 63f6e851b (Do not
save target
buffer after archiving subtree, 2017-11-25).
Thanks for the explanation, Kyle. I understand the intent of the
variable better now.
What do you think of something like this?
#+begin_src emacs-lisp
(defcustom org-archive-subtree-save-file-p 'unless-agenda
"Conditionally save the archive file after archiving a subtree.
The value 'unless-agenda prevents saving from the agenda-view.
The value 'only-agenda saves only when the archive is initiated
from the agenda-view.
The value t saves in all cases where the archive target buffer is
not the current buffer.
The value nil prevents saving in all cases."
:group 'org-archive
:package-version '(Org . "9.4")
:type '(choice
(const :tag "Do not save archive buffer when archiving
from an agenda view" unless-agenda)
(const :tag "Only save archive buffer when archiving
from an agenda view" only-agenda)
(const :tag "Save the archive buffer unless it is the
current buffer" t)
(const :tag "Do not save the archive buffer")))
#+end_src
#+begin_src emacs-lisp
;;don't save when target buffer is current buffer
(unless (eq buffer this-buffer)
;;t always saves
(when (or (eq org-archive-subtree-save-file-p t)
;;'unless-agenda saves unless archive initiated from
agenda
(and (eq org-archive-subtree-save-file-p
'unless-agenda)
(not (boundp 'org-archive-from-agenda)))
;;'only-agenda saves iff archive initiated from agenda
(and (eq org-archive-subtree-save-file-p 'only-agenda)
(boundp 'org-archive-from-agenda)))
(save-buffer)))
#+end_src
This should result in the following scenarios:
| org-archive-subtree-save-file-p | called-from-agenda? | buffer
saved? |
|---------------------------------+---------------------+---------------|
| t | nil | t
|
| t | t | t
|
| only-agenda | nil | nil
|
| only-agenda | t | t
|
| unless-agenda | nil | t
|
| unless-agenda | t | nil
|
| nil | nil | nil
|
| nil | t | nil
|