[-- Attachment #1: Type: text/plain, Size: 344 bytes --] Is it possible to attach a directory to an org heading? I have only seen how to attach a file so far. John ----------------------------------- Professor John Kitchin (he/him/his) Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 @johnkitchin http://kitchingroup.cheme.cmu.edu [-- Attachment #2: Type: text/html, Size: 676 bytes --]
[-- Attachment #1: Type: text/plain, Size: 319 bytes --] Den tis 8 juni 2021 kl 17:56 skrev John Kitchin <jkitchin@andrew.cmu.edu>: > Is it possible to attach a directory to an org heading? > > > Yes, you do arg-attach-set-directory. After that you need to sync it to make the files in the directory visible: org-attach-sync It's quite neat, I use it all the time. /Henrik [-- Attachment #2: Type: text/html, Size: 726 bytes --]
[-- Attachment #1: Type: text/plain, Size: 1045 bytes --] I am not sure that is what I meant, it looks like that specifies/changes the attachment directory for a heading. 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? John ----------------------------------- Professor John Kitchin (he/him/his) Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 @johnkitchin http://kitchingroup.cheme.cmu.edu On Tue, Jun 8, 2021 at 12:21 PM Henrik Frisk <frisk.h@gmail.com> wrote: > > > Den tis 8 juni 2021 kl 17:56 skrev John Kitchin <jkitchin@andrew.cmu.edu>: > >> Is it possible to attach a directory to an org heading? >> >> >> Yes, you do arg-attach-set-directory. After that you need to sync it to > make the files in the directory visible: org-attach-sync > > It's quite neat, I use it all the time. > > /Henrik > [-- Attachment #2: Type: text/html, Size: 2037 bytes --]
[-- 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
John Kitchin <jkitchin@andrew.cmu.edu> writes:
> Is it possible to attach a directory to an org heading?
>
> I have only seen how to attach a file so far.
I use the code below to attach directories and allow multiple selection
while attaching files. Also, if more people are interested in this kind
of functionality, I can write a simple patch. It's just a matter of
applying #'directory-file-name to the selected file name in the
interactive spec of the org-attach-attach.
(defvar yant/org-attach-default-source "~/Downloads/"
"Default directory to attach the files from.")
(define-advice org-attach-attach (:around (oldfun files &rest args) start-from-default-directory)
"Look for new attachments from `yant/org-attach-default-source' directory instead of `default-directory'."
(interactive
(list
(mapcar #'directory-file-name (helm-read-file-name "File to keep as an attachment:"
:initial-input (or (progn
(require 'dired-aux)
(dired-dwim-target-directory))
(and yant/org-attach-default-source
(f-slash yant/org-attach-default-source))
default-directory)
:marked-candidates t))
current-prefix-arg
nil))
(unless (listp files) (setq files (list files)))
(mapc (lambda (file) (apply oldfun file args)) files))
Best,
Ihor
[-- Attachment #1: Type: text/plain, Size: 712 bytes --] I want this feature patch too. Hope Org Mode can add this. I remember old version org-mode can do this. But later delete this feature? I forget what version is. I suggest to add this feature. > On Jun 8, 2021, at 11:49 PM, John Kitchin <jkitchin@andrew.cmu.edu> wrote: > > Is it possible to attach a directory to an org heading? > > I have only seen how to attach a file so far. > > John > > ----------------------------------- > Professor John Kitchin (he/him/his) > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > http://kitchingroup.cheme.cmu.edu <http://kitchingroup.cheme.cmu.edu/> > [-- Attachment #2: Type: text/html, Size: 1641 bytes --]
[-- Attachment #1: Type: text/plain, Size: 1217 bytes --] I discovered another way to do this that is already built in with `org-attach-dired-to-subtree` that would help sometimes. You split your window, open dired in one of them, mark some files, and then run that command in the dired window. John ----------------------------------- Professor John Kitchin (he/him/his) Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 @johnkitchin http://kitchingroup.cheme.cmu.edu On Thu, Jun 10, 2021 at 10:04 PM stardiviner <numbchild@gmail.com> wrote: > I want this feature patch too. Hope Org Mode can add this. I remember old > version org-mode can do this. But later delete this feature? I forget what > version is. > > I suggest to add this feature. > > On Jun 8, 2021, at 11:49 PM, John Kitchin <jkitchin@andrew.cmu.edu> wrote: > > Is it possible to attach a directory to an org heading? > > I have only seen how to attach a file so far. > > John > > ----------------------------------- > Professor John Kitchin (he/him/his) > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > http://kitchingroup.cheme.cmu.edu > > > [-- Attachment #2: Type: text/html, Size: 2259 bytes --]
I have put the Ihor's snippet in my init file. I find it very useful,
and everything is done from a simple Helm session. The only case it
doesn't work is when I just want to copy a directory --not a file--
(instead of moving or giving it a symbolic link). So I have done this
little modification (just added a conditional to the old function when
the method attach is 'cp: if attachment is a file, run `copy-file'. If
it is a directory, run `copy-directory'. Then just call the org-attach
dispatcher as always: C-c C-a and select an attach method:
(define-advice org-attach-attach (:around (oldfun files &rest args) start-from-default-directory)
"Code shared by Ihor Radchenko, slightly modified and adapted to my use."
(interactive
(list
(mapcar #'directory-file-name (helm-read-file-name "File to keep as an attachment:"
:initial-input (or (progn
(require 'dired-aux)
(dired-dwim-target-directory))
default-directory)
:marked-candidates t))
current-prefix-arg
nil))
;; my addition starts here
(setq oldfun (lambda (file &optional visit-dir method)
(interactive)
(setq method (or method org-attach-method))
(let ((basename (file-name-nondirectory file)))
(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) (if (file-directory-p file) (ref:lin-attach)
(copy-directory file attach-file)
(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)))
(run-hook-with-args 'org-attach-after-change-hook attach-dir)
(org-attach-tag)
(cond ((eq org-attach-store-link-p 'attached)
(push (list (concat "attachment:" (file-name-nondirectory attach-file))
(file-name-nondirectory attach-file))
org-stored-links))
((eq org-attach-store-link-p t)
(push (list (concat "file:" file)
(file-name-nondirectory file))
org-stored-links))
((eq org-attach-store-link-p 'file)
(push (list (concat "file:" attach-file)
(file-name-nondirectory attach-file))
org-stored-links)))
(if visit-dir
(dired attach-dir)
(message "File or directory %S is now an
attachment" basename))))))
;; my addition ends here
(unless (listp files) (setq files (list files)))
(mapc (lambda (file) (apply oldfun file args)) files))
John Kitchin writes:
> I discovered another way to do this that is already built in with
> `org-attach-dired-to-subtree` that would help sometimes.
>
> You split your window, open dired in one of them, mark some files, and
> then run that command in the dired window.
>
> John
>
> -----------------------------------
> Professor John Kitchin (he/him/his)
> Doherty Hall A207F
> Department of Chemical Engineering
> Carnegie Mellon University
> Pittsburgh, PA 15213
> 412-268-7803
> @johnkitchin
> http://kitchingroup.cheme.cmu.edu
>
> On Thu, Jun 10, 2021 at 10:04 PM stardiviner <numbchild@gmail.com>
> wrote:
>
> I want this feature patch too. Hope Org Mode can add this. I
> remember old version org-mode can do this. But later delete this
> feature? I forget what version is.
>
> I suggest to add this feature.
>
> On Jun 8, 2021, at 11:49 PM, John Kitchin
> <jkitchin@andrew.cmu.edu> wrote:
>
> Is it possible to attach a directory to an org heading?
>
> I have only seen how to attach a file so far.
>
> John
>
> -----------------------------------
> Professor John Kitchin (he/him/his)
> Doherty Hall A207F
> Department of Chemical Engineering
> Carnegie Mellon University
> Pittsburgh, PA 15213
> 412-268-7803
> @johnkitchin
> http://kitchingroup.cheme.cmu.edu
>
--
[-- Attachment #1: Type: text/plain, Size: 1854 bytes --] > On Jun 12, 2021, at 12:35 AM, John Kitchin <jkitchin@andrew.cmu.edu> wrote: > > I discovered another way to do this that is already built in with `org-attach-dired-to-subtree` that would help sometimes. > > You split your window, open dired in one of them, mark some files, and then run that command in the dired window. > > John Thanks John. I tried your methods. But this need to mark multiple regular files. Instead of a directory. It needs to leave Org file buffer. What if I have multiple Org buffer presents. It might cause chaos. I don’t think it’s a good solution to attach directory. But learn a new command. Still good. > > ----------------------------------- > Professor John Kitchin (he/him/his) > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > http://kitchingroup.cheme.cmu.edu <http://kitchingroup.cheme.cmu.edu/> > > > > On Thu, Jun 10, 2021 at 10:04 PM stardiviner <numbchild@gmail.com <mailto:numbchild@gmail.com>> wrote: > I want this feature patch too. Hope Org Mode can add this. I remember old version org-mode can do this. But later delete this feature? I forget what version is. > > I suggest to add this feature. > >> On Jun 8, 2021, at 11:49 PM, John Kitchin <jkitchin@andrew.cmu.edu <mailto:jkitchin@andrew.cmu.edu>> wrote: >> >> Is it possible to attach a directory to an org heading? >> >> I have only seen how to attach a file so far. >> >> John >> >> ----------------------------------- >> Professor John Kitchin (he/him/his) >> Doherty Hall A207F >> Department of Chemical Engineering >> Carnegie Mellon University >> Pittsburgh, PA 15213 >> 412-268-7803 >> @johnkitchin >> http://kitchingroup.cheme.cmu.edu <http://kitchingroup.cheme.cmu.edu/> >> > [-- Attachment #2: Type: text/html, Size: 4031 bytes --]
[-- Attachment #1: Type: text/plain, Size: 468 bytes --] Den fre 11 juni 2021 18:37John Kitchin <jkitchin@andrew.cmu.edu> skrev: > I discovered another way to do this that is already built in with > `org-attach-dired-to-subtree` that would help sometimes. > > You split your window, open dired in one of them, mark some files, and > then run that command in the dired window. > > John > >> Should have thought of this when you first asked if i had understood your question. This is a very useful function. /Henrik > >> >> [-- Attachment #2: Type: text/html, Size: 1890 bytes --]