summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Wahl <marcowahlsoft@gmail.com>2021-07-09 21:03:44 +0200
committerMarco Wahl <marcowahlsoft@gmail.com>2021-07-09 21:03:44 +0200
commit61e08373257dbbcd914c0bb41362630620e9e958 (patch)
treed4972b5a318ff4ade6b45c4f6d6b72112ff02406
parent32739e35e3da37ea8eddaf8c65abc5c1b442a2e5 (diff)
downloadorg-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-NEWS6
-rw-r--r--lisp/org-attach.el27
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.