Subject: Org Mode - attach file from URL
From: Wojciech Gac <[email-masked]>
To: [email-masked]
Date: Thu, 26 Jan 2017 19:04:40 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello,
I modified the Org Mode function `org-attach' to handle one additional way
of attaching a file, namely by specifying a download URL. Now, when calling
`org-attach', you can use the `u' key to specify this URL.
Regards,
Wojtek
From bf3657f3d45ed9882c6d76469a6c6446da62841d Mon Sep 17 00:00:00 2001
From: Wojciech Gac <[email-masked]>
Date: Thu, 26 Jan 2017 18:58:33 +0100
Subject: [PATCH] Extend `org-attach' to allow attaching files from URLs

---
 lisp/org/org-attach.el | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/lisp/org/org-attach.el b/lisp/org/org-attach.el
index 7d25437d9f..45af805839 100644
--- a/lisp/org/org-attach.el
+++ b/lisp/org/org-attach.el
@@ -144,6 +144,7 @@ org-attach
 
 a       Select a file and attach it to the task, using `org-attach-method'.
 c/m/l/y Attach a file using copy/move/link/symbolic-link method.
+u       Attach a file from URL (downloading it).
 n       Create a new attachment, as an Emacs buffer.
 z       Synchronize the current task with its attachment
         directory, in case you added attachments yourself.
@@ -173,6 +174,8 @@ org-attach
 	(let ((org-attach-method 'ln)) (call-interactively 'org-attach-attach)))
        ((memq c '(?y ?\C-y))
 	(let ((org-attach-method 'lns)) (call-interactively 'org-attach-attach)))
+       ((memq c '(?u ?\C-u))
+        (let ((org-attach-method 'url)) (call-interactively 'org-attach-url)))
        ((memq c '(?n ?\C-n)) (call-interactively 'org-attach-new))
        ((memq c '(?z ?\C-z)) (call-interactively 'org-attach-sync))
        ((memq c '(?o ?\C-o)) (call-interactively 'org-attach-open))
@@ -310,10 +313,14 @@ org-attach-store-link
 		    (file-name-nondirectory file))
 	      org-stored-links)))
 
+(defun org-attach-url (url)
+       (interactive "MURL of the file to attach: \n")
+       (org-attach-attach url))
+
 (defun org-attach-attach (file &optional visit-dir method)
   "Move/copy/link FILE into the attachment directory of the current task.
 If VISIT-DIR is non-nil, visit the directory with dired.
-METHOD may be `cp', `mv', `ln', or `lns' default taken from
+METHOD may be `cp', `mv', `ln', `lns' or `url' default taken from
 `org-attach-method'."
   (interactive "fFile to keep as an attachment: \nP")
   (setq method (or method org-attach-method))
@@ -327,7 +334,8 @@ org-attach-attach
        ((eq method 'mv)	(rename-file file fname))
        ((eq method 'cp)	(copy-file file fname))
        ((eq method 'ln) (add-name-to-file file fname))
-       ((eq method 'lns) (make-symbolic-link file fname)))
+       ((eq method 'lns) (make-symbolic-link file fname))
+       ((eq method 'url) (url-copy-file file fname)))
       (org-attach-commit)
       (org-attach-tag)
       (cond ((eq org-attach-store-link-p 'attached)
-- 
2.11.0