diff options
author | Marco Wahl <marcowahlsoft@gmail.com> | 2021-07-09 21:03:44 +0200 |
---|---|---|
committer | Marco Wahl <marcowahlsoft@gmail.com> | 2021-07-09 21:03:44 +0200 |
commit | 61e08373257dbbcd914c0bb41362630620e9e958 (patch) | |
tree | d4972b5a318ff4ade6b45c4f6d6b72112ff02406 | |
parent | 32739e35e3da37ea8eddaf8c65abc5c1b442a2e5 (diff) | |
download | org-mode-61e08373257dbbcd914c0bb41362630620e9e958.tar.gz |
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).
-rw-r--r-- | etc/ORG-NEWS | 6 | ||||
-rw-r--r-- | lisp/org-attach.el | 27 |
2 files changed, 29 insertions, 4 deletions
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 719ac35..78a57ba 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -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 diff --git a/lisp/org-attach.el b/lisp/org-attach.el index 715fe3e..e8e8ade 100644 --- a/lisp/org-attach.el +++ b/lisp/org-attach.el @@ -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. |