emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* org-attach a directory?
@ 2021-06-08 15:49 John Kitchin
  2021-06-08 16:21 ` Henrik Frisk
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: John Kitchin @ 2021-06-08 15:49 UTC (permalink / raw)
  To: org-mode-email

[-- 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 --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: org-attach a directory?
  2021-06-08 15:49 org-attach a directory? John Kitchin
@ 2021-06-08 16:21 ` Henrik Frisk
  2021-06-08 20:41   ` John Kitchin
  2021-06-09  1:38 ` Ihor Radchenko
  2021-06-11  1:43 ` stardiviner
  2 siblings, 1 reply; 10+ messages in thread
From: Henrik Frisk @ 2021-06-08 16:21 UTC (permalink / raw)
  To: John Kitchin; +Cc: org-mode-email

[-- 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 --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: org-attach a directory?
  2021-06-08 16:21 ` Henrik Frisk
@ 2021-06-08 20:41   ` John Kitchin
  2021-06-09  1:38     ` [patch] " Juan Manuel Macías
  0 siblings, 1 reply; 10+ messages in thread
From: John Kitchin @ 2021-06-08 20:41 UTC (permalink / raw)
  To: Henrik Frisk; +Cc: org-mode-email

[-- 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 --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [patch] Re: org-attach a directory?
  2021-06-08 20:41   ` John Kitchin
@ 2021-06-09  1:38     ` Juan Manuel Macías
  0 siblings, 0 replies; 10+ messages in thread
From: Juan Manuel Macías @ 2021-06-09  1:38 UTC (permalink / raw)
  To: John Kitchin; +Cc: orgmode

[-- 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


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: org-attach a directory?
  2021-06-08 15:49 org-attach a directory? John Kitchin
  2021-06-08 16:21 ` Henrik Frisk
@ 2021-06-09  1:38 ` Ihor Radchenko
  2021-06-11  1:43 ` stardiviner
  2 siblings, 0 replies; 10+ messages in thread
From: Ihor Radchenko @ 2021-06-09  1:38 UTC (permalink / raw)
  To: John Kitchin; +Cc: org-mode-email

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


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: org-attach a directory?
  2021-06-08 15:49 org-attach a directory? John Kitchin
  2021-06-08 16:21 ` Henrik Frisk
  2021-06-09  1:38 ` Ihor Radchenko
@ 2021-06-11  1:43 ` stardiviner
  2021-06-11 16:35   ` John Kitchin
  2 siblings, 1 reply; 10+ messages in thread
From: stardiviner @ 2021-06-11  1:43 UTC (permalink / raw)
  To: John Kitchin; +Cc: Org-mode

[-- 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 --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: org-attach a directory?
  2021-06-11  1:43 ` stardiviner
@ 2021-06-11 16:35   ` John Kitchin
  2021-06-11 17:10     ` Juan Manuel Macías
                       ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: John Kitchin @ 2021-06-11 16:35 UTC (permalink / raw)
  To: stardiviner; +Cc: Org-mode

[-- 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 --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: org-attach a directory?
  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
  2 siblings, 0 replies; 10+ messages in thread
From: Juan Manuel Macías @ 2021-06-11 17:10 UTC (permalink / raw)
  To: John Kitchin; +Cc: orgmode

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
>

--


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: org-attach a directory?
  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
  2 siblings, 0 replies; 10+ messages in thread
From: stardiviner @ 2021-06-15 12:45 UTC (permalink / raw)
  To: John Kitchin; +Cc: Org-mode

[-- 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 --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: org-attach a directory?
  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
  2 siblings, 0 replies; 10+ messages in thread
From: Henrik Frisk @ 2021-06-15 20:22 UTC (permalink / raw)
  To: John Kitchin; +Cc: Org-mode

[-- 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 --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2021-06-15 20:21 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-06-08 15:49 org-attach a directory? John Kitchin
2021-06-08 16:21 ` Henrik Frisk
2021-06-08 20:41   ` John Kitchin
2021-06-09  1:38     ` [patch] " Juan Manuel Macías
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

Code repositories for project(s) associated with this public 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).