Changes
[emacs.git] / .emacs.d / elisp / org / org-attach.el
index bcf7ba7..1737ec1 100644 (file)
@@ -120,6 +120,17 @@ lns   create a symbol link.  Note that this is not supported
          (const :tag "Link to origin location" t)
          (const :tag "Link to the attach-dir location" attached)))
 
+(defcustom org-attach-archive-delete nil
+  "Non-nil means attachments are deleted upon archiving a subtree.
+When set to `query', ask the user instead."
+  :group 'org-attach
+  :version "25.1"
+  :package-version '(Org . "8.3")
+  :type '(choice
+         (const :tag "Never delete attachments" nil)
+         (const :tag "Always delete attachments" t)
+         (const :tag "Query the user" query)))
+
 ;;;###autoload
 (defun org-attach ()
   "The dispatcher for attachment commands.
@@ -419,15 +430,15 @@ This can be used after files have been added externally."
        (and files (org-attach-tag))
        (when org-attach-file-list-property
          (dolist (file files)
-           (unless (string-match "^\\." file)
+           (unless (string-match "^\\.\\.?\\'" file)
              (org-entry-add-to-multivalued-property
               (point) org-attach-file-list-property file))))))))
 
 (defun org-attach-file-list (dir)
   "Return a list of files in the attachment directory.
-This ignores files starting with a \".\", and files ending in \"~\"."
+This ignores files ending in \"~\"."
   (delq nil
-       (mapcar (lambda (x) (if (string-match "^\\." x) nil x))
+       (mapcar (lambda (x) (if (string-match "^\\.\\.?\\'" x) nil x))
                (directory-files dir nil "[^~]\\'"))))
 
 (defun org-attach-reveal (&optional if-exists)
@@ -475,6 +486,17 @@ Basically, this adds the path to the attachment directory, and a \"file:\"
 prefix."
   (concat "file:" (org-attach-expand file)))
 
+(defun org-attach-archive-delete-maybe ()
+  "Maybe delete subtree attachments when archiving.
+This function is called by `org-archive-hook'.  The option
+`org-attach-archive-delete' controls its behavior."
+  (when (if (eq org-attach-archive-delete 'query)
+           (yes-or-no-p "Delete all attachments? ")
+         org-attach-archive-delete)
+    (org-attach-delete-all t)))
+
+(add-hook 'org-archive-hook 'org-attach-archive-delete-maybe)
+
 (provide 'org-attach)
 
 ;; Local variables: