org-attach: Possibly delete empty attach directory

* lisp/org-attach.(org-attach-sync): Enable possible deletion of empty
attachment directories.  `org-attach-sync-delete-empty-dir' controls
the action: Never delete, Always delete or Query the user (default).
This commit is contained in:
Marco Wahl 2021-07-09 21:03:44 +02:00
parent 32739e35e3
commit 61e0837325
2 changed files with 29 additions and 4 deletions

View File

@ -188,6 +188,12 @@ it is correctly configured as a Git repository.
See [[msg:875z8njaol.fsf@protesilaos.com][this thread]].
*** New option ~org-attach-sync-delete-empty-dir~
~org-attach-sync-delete-empty-dir~ controls the deletion of an empty
attachment directory at calls of ~org-attach-sync~. There is
Never delete, Always delete and Query the user (default).
** New features
*** ~ox-koma-letter.el~ is now part of Org's core

View File

@ -245,6 +245,17 @@ Each entry in this list is a list of three elements:
(function :tag "Command")
(string :tag "Docstring"))))
(defcustom org-attach-sync-delete-empty-dir 'query
"Determine what to do with an empty attachment directory on sync.
When set to nil, don't touch the directory. When set to `query',
ask the user instead, else remove without asking."
:group 'org-attach
:package-version '(Org . "9.5")
:type '(choice
(const :tag "Never delete" nil)
(const :tag "Always delete" t)
(const :tag "Query the user" query)))
;;;###autoload
(defun org-attach ()
"The dispatcher for attachment commands.
@ -600,14 +611,22 @@ with no prompts."
(defun org-attach-sync ()
"Synchronize the current outline node with its attachments.
This can be used after files have been added externally."
Useful after files have been added/removed externally. Option
`org-attach-sync-delete-empty-dir' controls the behavior for
empty attachment directories."
(interactive)
(let ((attach-dir (org-attach-dir)))
(when attach-dir
(if (not attach-dir)
(org-attach-tag 'off)
(run-hook-with-args 'org-attach-after-change-hook attach-dir)
(let ((files (org-attach-file-list attach-dir)))
(org-attach-tag (not files))))
(unless attach-dir (org-attach-tag t))))
(org-attach-tag (not files)))
(when org-attach-sync-delete-empty-dir
(when (and (directory-empty-p attach-dir)
(if (eq 'query org-attach-sync-delete-empty-dir)
(yes-or-no-p "Attachment directory is empty. Delete?")
t))
(delete-directory attach-dir))))))
(defun org-attach-file-list (dir)
"Return a list of files in the attachment directory.