emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Nicolas Richard <theonewiththeevillook@yahoo.fr>
To: emacs-orgmode@gnu.org
Subject: An org-attach link type [7.9.1 (7.9.1-elpa @ /home/youngfrog/.emacs.d/elpa/org-20120903/)]
Date: Wed, 19 Sep 2012 16:53:15 +0200	[thread overview]
Message-ID: <5059DC5B.3080203@yahoo.fr> (raw)

Hello there,

Some people already have suggested and produced some code (see [1,2]) in
order to have an "attach" (or "att", as it was called) link type in
org-mode. I never found a org--complete-link function for these links
on the net, so I tried to write it for myself. In order to do that, I had
to modify org-insert-link so that the org-mode buffer is made current
(instead of *Org Links*) when calling org-link-try-special-completion.
This allows the org--complete-link family of functions to access the actual
org buffer from which org-insert-link was called. A patch in this direction
is at the end of my email. (This is the first time that I use
git-format-patch, I hope I got that right).

With that change, here is some code that adds an "att" link type with completion:

(defun org-att-complete-link ()
  "File completion for the \"att\" filetype in `org-mode'."
  (let* ((attach-dir (org-attach-dir nil))
         files file)
    (unless attach-dir
      (error "No attachment dir."))
    (setq files (find-lisp-find-files attach-dir "^[^.].*[^~]$")
          file (org-icompleting-read "Find attachment: "
                                       (mapcar 
                                        (lambda (x) (file-relative-name x attach-dir))
                                        files)
                                       nil t))
    (case org-att-complete-how
      ('full (org-attach-expand-link file))
      ('relative (concat "file:" attach-dir file))
      ('attach (concat "att:" file)))))
(defvar org-att-complete-how 'attach
"Determines how org-att-complete-link completes links to attachments.

It can be the symbols :
- `full' :: A \"file:\" link with full path is returned,
- `relative' :: a \"file:\" link containg a path relative to the directory where the org-file resides is returned, or
- `attach' :: an \"att:\" link is returned.

`full' is probably best avoided.")

(org-add-link-type "att" 'org-att-open-link)
(defun org-att-open-link (file)
  (org-open-file (org-attach-expand file)))

I hope that this is useful to anybody, and not too sloppy (I'm not
fluent in elisp)

[1] http://lists.gnu.org/archive/html/emacs-orgmode/2011-04/msg00010.html
[2] http://lists.gnu.org/archive/html/emacs-orgmode/2011-02/msg00952.html


The patch for the above mentionned change in org.el follows :

-- 8> --
Subject: [PATCH] Allow org--complete-read family of functions to access
 current-buffer

This allows for link-completion features based on information around the point.
---
 lisp/org.el | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lisp/org.el b/lisp/org.el
index 3dfd073..fc5d709 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -9411,6 +9411,7 @@ If the DEFAULT-DESCRIPTION parameter is non-nil, this value will
 be used as the default description."
   (interactive "P")
   (let* ((wcf (current-window-configuration))
+	 (buffer (current-buffer))
 	 (region (if (org-region-active-p)
 		     (buffer-substring (region-beginning) (region-end))))
 	 (remove (and region (list (region-beginning) (region-end))))
@@ -9486,7 +9487,7 @@ Use TAB to complete link prefixes, then RET for type-specific completion support
 		    (and (equal ":" (substring link -1))
 			 (member (substring link 0 -1) all-prefixes)
 			 (setq link (substring link 0 -1))))
-		(setq link (org-link-try-special-completion link))))
+		(setq link (with-current-buffer buffer (org-link-try-special-completion link)))))
 	(set-window-configuration wcf)
 	(kill-buffer "*Org Links*"))
       (setq entry (assoc link org-stored-links))
-- 
1.7.12

             reply	other threads:[~2012-09-19 14:53 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-19 14:53 Nicolas Richard [this message]
2012-09-22  7:14 ` An org-attach link type [7.9.1 (7.9.1-elpa @ /home/youngfrog/.emacs.d/elpa/org-20120903/)] Viktor Rosenfeld
2012-09-22  8:58   ` Nicolas Richard
2012-09-22 17:52     ` Viktor Rosenfeld
2012-09-22  9:20 ` Bastien
2012-09-27 16:25   ` Nicolas Richard
2012-09-28  6:43     ` Bastien
2012-09-27 16:27   ` Nicolas Richard

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=5059DC5B.3080203@yahoo.fr \
    --to=theonewiththeevillook@yahoo.fr \
    --cc=emacs-orgmode@gnu.org \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).