org-attach: Make org-attach move directories, when attachment dir changes

* lisp/org-attach.el (org-attach-set-directory): Make org-attach move
  directories, when attachment dir changes.
(org-attach): Update docstring.
This commit is contained in:
Florian Lindner 2017-07-09 17:16:24 +02:00 committed by Nicolas Goaziou
parent 360109e6c7
commit da99ee0fa6
2 changed files with 29 additions and 8 deletions

View File

@ -88,6 +88,11 @@ See docstring for details.
*** Change signature for ~org-time-string-to-time~ *** Change signature for ~org-time-string-to-time~
See docstring for changes. See docstring for changes.
** New features ** New features
*** ~org-attach~ can move directory contents
When setting a new directory for an entry, org-attach offers to move
files over from the old directory. Using a prefix arg will reset the
directory to old, ID based one.
*** New Org duration library *** New Org duration library
This new library implements tools to read and print time durations in This new library implements tools to read and print time durations in
various formats (e.g., "H:MM", or "1d 2h 3min"...). various formats (e.g., "H:MM", or "1d 2h 3min"...).

View File

@ -189,7 +189,7 @@ d Delete one attachment, you will be prompted for a file name.
D Delete all of a task's attachments. A safer way is D Delete all of a task's attachments. A safer way is
to open the directory in dired and delete from there. to open the directory in dired and delete from there.
s Set a specific attachment directory for this entry. s Set a specific attachment directory for this entry or reset to default.
i Make children of the current entry inherit its attachment directory."))) i Make children of the current entry inherit its attachment directory.")))
(org-fit-window-to-buffer (get-buffer-window "*Org Attach*")) (org-fit-window-to-buffer (get-buffer-window "*Org Attach*"))
(message "Select command: [acmlzoOfFdD]") (message "Select command: [acmlzoOfFdD]")
@ -275,14 +275,30 @@ Throw an error if we cannot root the directory."
(buffer-file-name (buffer-base-buffer)) (buffer-file-name (buffer-base-buffer))
(error "Need absolute `org-attach-directory' to attach in buffers without filename"))) (error "Need absolute `org-attach-directory' to attach in buffers without filename")))
(defun org-attach-set-directory () (defun org-attach-set-directory (&optional arg)
"Set the ATTACH_DIR property of the current entry. "Set the ATTACH_DIR node property and ask to move files there.
The property defines the directory that is used for attachments The property defines the directory that is used for attachments
of the entry." of the entry. When called with `\\[universal-argument]', reset \
(interactive) the directory to
(let ((dir (org-entry-get nil "ATTACH_DIR"))) the default ID based one."
(setq dir (read-directory-name "Attachment directory: " dir)) (interactive "P")
(org-entry-put nil "ATTACH_DIR" dir))) (let ((old (org-attach-dir))
(new
(progn
(if arg (org-entry-delete nil "ATTACH_DIR")
(let ((dir (read-directory-name
"Attachment directory: "
(org-entry-get nil
"ATTACH_DIR"
(and org-attach-allow-inheritance t)))))
(org-entry-put nil "ATTACH_DIR" dir)))
(org-attach-dir t))))
(unless (or (string= old new)
(not old))
(when (yes-or-no-p "Copy over attachments from old directory? ")
(copy-directory old new t nil t))
(when (yes-or-no-p (concat "Delete " old))
(delete-directory old t)))))
(defun org-attach-set-inherit () (defun org-attach-set-inherit ()
"Set the ATTACH_DIR_INHERIT property of the current entry. "Set the ATTACH_DIR_INHERIT property of the current entry.