From: "Juan Manuel Macías" <maciaschain@posteo.net> To: John Kitchin <jkitchin@andrew.cmu.edu> Cc: orgmode <emacs-orgmode@gnu.org> Subject: [patch] Re: org-attach a directory? Date: Wed, 09 Jun 2021 01:38:01 +0000 [thread overview] Message-ID: <874ke7x1fq.fsf_-_@posteo.net> (raw) In-Reply-To: <CAJ51ETqhdT5wzOaMmvCPLf5pWa6fUi_VHQPHX88iF8oFppiUVw@mail.gmail.com> (John Kitchin's message of "Tue, 8 Jun 2021 16:41:17 -0400") [-- Attachment #1: Type: text/plain, Size: 786 bytes --] Hi John, John Kitchin writes: > I want to attach all the files in a directory on my desktop to the > attachment directory, something that is more like > org-attach-attach-mv-directory (that is not an existing command, but > what I was thinking of doing). Did I misunderstand what > org-attach-set-directory does? As far as I know, that option is not possible. And it's something that I've always missed in org-attach. I've written this possible patch, with two new attach methods/commands to copy or move a directory ("C" and "M"). I guess it would be better to use `read-file-name' and `read-directory-name' according to each case, but I can't think of how to solve that. Anyway, `read-file-name' may also apply here for directories. (Little tested). Best regards, Juan Manuel [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Org-attach.el-Add-two-new-methods-for-cp-or-mv-directories.patch --] [-- Type: text/x-patch, Size: 4462 bytes --] From 5a2f59a74c9b3f8ff1cf25777067780400f9043f Mon Sep 17 00:00:00 2001 From: Juan Manuel Macias <maciaschain@posteo.net> Date: Wed, 9 Jun 2021 03:03:50 +0200 Subject: [PATCH] Org-attach.el: Add two new methods for copying or moving directories * lisp/org-attach.el (org-attach-commands): add two new attachments commands (org-attach-attach): add two new attachment methods, argument `file' is ranamed as `target' (org-attach-attach-cp-dir): copy a directory (org-attach-attach-mv-dir): move (rename) a directory --- lisp/org-attach.el | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/lisp/org-attach.el b/lisp/org-attach.el index 715fe3e93..50b1dca3b 100644 --- a/lisp/org-attach.el +++ b/lisp/org-attach.el @@ -199,6 +199,10 @@ git-functionality from this file.") "Attach a file using copy method.") ((?m ?\C-m) org-attach-attach-mv "Attach a file using move method.") + ((?C ?\C-C) org-attach-attach-cp-dir + "Attach a directory using copy dir method.") + ((?M ?\C-M) org-attach-attach-mv-dir + "Attach a directory using move dir method.") ((?l ?\C-l) org-attach-attach-ln "Attach a file using link method.") ((?y ?\C-y) org-attach-attach-lns @@ -489,8 +493,8 @@ if it would overwrite an existing filename." (with-temp-file output (insert-buffer-substring buffer-name)))) -(defun org-attach-attach (file &optional visit-dir method) - "Move/copy/link FILE into the attachment directory of the current outline node. +(defun org-attach-attach (target &optional visit-dir method) + "Move/copy/link TARGET into the attachment directory of the current outline node. If VISIT-DIR is non-nil, visit the directory with dired. METHOD may be `cp', `mv', `ln', `lns' or `url' default taken from `org-attach-method'." @@ -504,15 +508,20 @@ METHOD may be `cp', `mv', `ln', `lns' or `url' default taken from current-prefix-arg nil)) (setq method (or method org-attach-method)) - (let ((basename (file-name-nondirectory file))) + (let ((basename (if (or (eq method 'mv-dir) + (eq method 'cp-dir)) + target + (file-name-nondirectory target)))) (let* ((attach-dir (org-attach-dir 'get-create)) (attach-file (expand-file-name basename attach-dir))) (cond - ((eq method 'mv) (rename-file file attach-file)) - ((eq method 'cp) (copy-file file attach-file)) - ((eq method 'ln) (add-name-to-file file attach-file)) - ((eq method 'lns) (make-symbolic-link file attach-file)) - ((eq method 'url) (url-copy-file file attach-file))) + ((eq method 'mv) (rename-file target attach-file)) + ((eq method 'cp) (copy-file target attach-file)) + ((eq method 'mv-dir) (rename-file target (concat attach-dir "/"))) + ((eq method 'cp-dir) (copy-directory target (concat attach-dir "/"))) + ((eq method 'ln) (add-name-to-file target attach-file)) + ((eq method 'lns) (make-symbolic-link target attach-file)) + ((eq method 'url) (url-copy-file target attach-file))) (run-hook-with-args 'org-attach-after-change-hook attach-dir) (org-attach-tag) (cond ((eq org-attach-store-link-p 'attached) @@ -520,8 +529,8 @@ METHOD may be `cp', `mv', `ln', `lns' or `url' default taken from (file-name-nondirectory attach-file)) org-stored-links)) ((eq org-attach-store-link-p t) - (push (list (concat "file:" file) - (file-name-nondirectory file)) + (push (list (concat "file:" target) + (file-name-nondirectory target)) org-stored-links)) ((eq org-attach-store-link-p 'file) (push (list (concat "file:" attach-file) @@ -539,6 +548,14 @@ METHOD may be `cp', `mv', `ln', `lns' or `url' default taken from "Attach a file by moving (renaming) it." (interactive) (let ((org-attach-method 'mv)) (call-interactively 'org-attach-attach))) +(defun org-attach-attach-cp-dir () + "Attach a directory by copying it." + (interactive) + (let ((org-attach-method 'cp-dir)) (call-interactively 'org-attach-attach))) +(defun org-attach-attach-mv-dir () + "Attach a directory by moving (renaming) it." + (interactive) + (let ((org-attach-method 'mv-dir)) (call-interactively 'org-attach-attach))) (defun org-attach-attach-ln () "Attach a file by creating a hard link to it. Beware that this does not work on systems that do not support hard links. -- 2.31.1
next prev parent reply other threads:[~2021-06-09 1:38 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-06-08 15:49 John Kitchin 2021-06-08 16:21 ` Henrik Frisk 2021-06-08 20:41 ` John Kitchin 2021-06-09 1:38 ` Juan Manuel Macías [this message] 2021-06-09 1:38 ` Ihor Radchenko 2021-06-11 1:43 ` stardiviner 2021-06-11 16:35 ` John Kitchin 2021-06-11 17:10 ` Juan Manuel Macías 2021-06-15 12:45 ` stardiviner 2021-06-15 20:22 ` Henrik Frisk
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: https://www.orgmode.org/ * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=874ke7x1fq.fsf_-_@posteo.net \ --to=maciaschain@posteo.net \ --cc=emacs-orgmode@gnu.org \ --cc=jkitchin@andrew.cmu.edu \ --subject='[patch] Re: org-attach a directory?' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Code repositories for project(s) associated with this inbox: https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).