emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* easy way to link to file in attachment directory?
@ 2014-09-04 13:54 Mirko Vukovic
  2014-09-04 22:19 ` Darlan Cavalcante Moreira
  0 siblings, 1 reply; 3+ messages in thread
From: Mirko Vukovic @ 2014-09-04 13:54 UTC (permalink / raw)
  To: emacs-orgmode

Hello,

Is there a way to insert a link to a file in the attachment directory?

Currently, I open the attachment directory in emacs and copy the full path.
then in the document I create the link using org-insert-link (C-u C-c C-l).

Thanks,

Mirko

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

* Re: easy way to link to file in attachment directory?
  2014-09-04 13:54 easy way to link to file in attachment directory? Mirko Vukovic
@ 2014-09-04 22:19 ` Darlan Cavalcante Moreira
  2014-09-05 10:27   ` [PATCH] Add a support for linking against an attachment of current entry (was: easy way to link to file in attachment directory?) Samuel Loury
  0 siblings, 1 reply; 3+ messages in thread
From: Darlan Cavalcante Moreira @ 2014-09-04 22:19 UTC (permalink / raw)
  To: Mirko Vukovic; +Cc: emacs-orgmode

I have this
  #+LINK: attach elisp:(org-open-file (org-attach-expand "%s"))
in all of my org-mode files. In fact, I have this line, among others, in
an org-mode setup file which is included in all of my org-mode files
using "#+SETUPFILE:"

Then I can create a link to an attachment with
[[attach:filename_without_any_path.extension][description]]

Also, just after attaching a new file org will automatically store the
link so that you can use "C-c C-l" to include the link.

-- 
Darlan Cavalcante Moreira
darcamo@gmail.com


mirko.vukovic@gmail.com writes:

> Hello,
>
> Is there a way to insert a link to a file in the attachment directory?
>
> Currently, I open the attachment directory in emacs and copy the full path.
> then in the document I create the link using org-insert-link (C-u C-c C-l).
>
> Thanks,
>
> Mirko

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

* [PATCH] Add a support for linking against an attachment of current entry (was: easy way to link to file in attachment directory?)
  2014-09-04 22:19 ` Darlan Cavalcante Moreira
@ 2014-09-05 10:27   ` Samuel Loury
  0 siblings, 0 replies; 3+ messages in thread
From: Samuel Loury @ 2014-09-05 10:27 UTC (permalink / raw)
  To: Darlan Cavalcante Moreira, Mirko Vukovic; +Cc: emacs-orgmode


[-- Attachment #1.1: Type: text/plain, Size: 1159 bytes --]

Hi,
Darlan Cavalcante Moreira <darcamo@gmail.com> writes:

> I have this
>   #+LINK: attach elisp:(org-open-file (org-attach-expand "%s"))
> in all of my org-mode files. In fact, I have this line, among others, in
> an org-mode setup file which is included in all of my org-mode files
> using "#+SETUPFILE:"
>
> Then I can create a link to an attachment with
> [[attach:filename_without_any_path.extension][description]]
>
> Also, just after attaching a new file org will automatically store the
> link so that you can use "C-c C-l" to include the link.
I like your solution, but I was quite frustrated by the lack of
completion against the attached files,

Here, I propose a solution using `org-add-link-type' and adding
"attach:" kind of links.

I actually propose to patch org mode to add this feature. I realized
that the part about finding the attached file was already implemented
into `org-attach-open', so I first extracted the functionality into a
separated function, then I made use of it to implement the new "attach:"
link and the associated completion.

For that reason, I split the work into two commits that you'll find
attached to this mail.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-Get-the-part-finding-an-attachment-out-of-org-attach.patch --]
[-- Type: text/x-diff, Size: 2567 bytes --]

From d4b87312d96d4d1ec44562df5b951aa4df1f7a16 Mon Sep 17 00:00:00 2001
From: Konubinix <konubinix@gmail.com>
Date: Fri, 5 Sep 2014 12:11:41 +0200
Subject: [PATCH 1/2] Get the part finding an attachment out of
 `org-attach-open'.

* lisp/org-attach.el (org-attach-find-file): Created
* lisp/org-attach.el (org-attach-open): Make use of `org-attach-open'

This will allow other functions to make use of the `org-attach-find-file'
feature.
---
 lisp/org-attach.el | 35 +++++++++++++++++++++++++++--------
 1 file changed, 27 insertions(+), 8 deletions(-)

diff --git a/lisp/org-attach.el b/lisp/org-attach.el
index bcf7ba7..eb22b39 100644
--- a/lisp/org-attach.el
+++ b/lisp/org-attach.el
@@ -443,20 +443,39 @@ This will attempt to use an external program to show the directory."
   (let ((attach-dir (org-attach-dir t)))
     (dired attach-dir)))
 
+
+(defun org-attach-find-file (prompt)
+  "Provides the name of a file available in the attachments of current
+heading.
+If there are more than one attachment, you will be prompted for the file name."
+  (let* ((attach-dir (org-attach-dir t))
+	 (files (org-attach-file-list attach-dir)))
+    (and
+     ;; return nil if not files
+     files
+     (or
+      ;; return the only available file
+      (and
+       (= (length files) 1)
+       (car files)
+       )
+      ;; or return the result of the completion
+      (org-icompleting-read
+       prompt
+       (mapcar 'list files) nil t)))))
+
 (defun org-attach-open (&optional in-emacs)
   "Open an attachment of the current task.
-If there are more than one attachment, you will be prompted for the file name.
+Use `org-attach-complete-file' to find the desired file.
 This command will open the file using the settings in `org-file-apps'
 and in the system-specific variants of this variable.
 If IN-EMACS is non-nil, force opening in Emacs."
   (interactive "P")
-  (let* ((attach-dir (org-attach-dir t))
-	 (files (org-attach-file-list attach-dir))
-	 (file (if (= (length files) 1)
-		   (car files)
-		 (org-icompleting-read "Open attachment: "
-				       (mapcar 'list files) nil t))))
-    (org-open-file (expand-file-name file attach-dir) in-emacs)))
+  (let* ((file (org-attach-find-file "Open attachment: "))
+	 (attach-dir (org-attach-dir t)))
+    (if file
+	(org-open-file (expand-file-name file attach-dir) in-emacs)
+      (user-error "Current heading has no attached file"))))
 
 (defun org-attach-open-in-emacs ()
   "Open attachment, force opening in Emacs.
-- 
2.1.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.3: 0002-Add-a-support-for-linking-against-an-attachment-of-c.patch --]
[-- Type: text/x-diff, Size: 1308 bytes --]

From 916a86e8db6ce6b2dc02ea663d70d07f952bbc33 Mon Sep 17 00:00:00 2001
From: Konubinix <konubinix@gmail.com>
Date: Fri, 5 Sep 2014 12:19:12 +0200
Subject: [PATCH 2/2] Add a support for linking against an attachment of
 current entry.

* lisp/org-attach.el (org-attach-open-link, org-attach-complete-link): Created

Add a call to `org-add-link-type' to make use of the feature.
---
 lisp/org-attach.el | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/lisp/org-attach.el b/lisp/org-attach.el
index eb22b39..3d6dc71 100644
--- a/lisp/org-attach.el
+++ b/lisp/org-attach.el
@@ -494,6 +494,19 @@ Basically, this adds the path to the attachment directory, and a \"file:\"
 prefix."
   (concat "file:" (org-attach-expand file)))
 
+(defun org-attach-open-link (file-name)
+  "Open a link to a file attached to the current entry."
+  (let ((attach-dir (org-attach-dir t)))
+	(org-open-file (expand-file-name file-name attach-dir))))
+
+(defun org-attach-complete-link ()
+  "Completion on the attachments when creating a link."
+  (let* ((file (org-attach-find-file "Attached file:")))
+    (format "attach:%s" file)))
+
+;; Install the link type
+(org-add-link-type "attach" 'org-attach-open-link)
+
 (provide 'org-attach)
 
 ;; Local variables:
-- 
2.1.0


[-- Attachment #1.4: Type: text/plain, Size: 113 bytes --]

Best regards,
--
Konubinix
GPG Key    : 7439106A
Fingerprint: 5993 BE7A DA65 E2D9 06CE  5C36 75D2 3CED 7439 106A

[-- Attachment #2: Type: application/pgp-signature, Size: 472 bytes --]

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

end of thread, other threads:[~2014-09-05 10:27 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-04 13:54 easy way to link to file in attachment directory? Mirko Vukovic
2014-09-04 22:19 ` Darlan Cavalcante Moreira
2014-09-05 10:27   ` [PATCH] Add a support for linking against an attachment of current entry (was: easy way to link to file in attachment directory?) Samuel Loury

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).