emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Nick Dokos <nicholas.dokos@hp.com>
To: Joe Riel <joer@san.rr.com>
Cc: nicholas.dokos@hp.com, emacs-orgmode@gnu.org
Subject: Re: Specify page number in hyperlink [to pdf]
Date: Fri, 30 Apr 2010 04:10:34 -0400	[thread overview]
Message-ID: <26943.1272615034@gamaville.dokosmarshall.org> (raw)
In-Reply-To: Message from Joe Riel <joer@san.rr.com> of "Thu\, 29 Apr 2010 21\:43\:49 PDT." <4BDA6005.2080708@san.rr.com>

Joe Riel <joer@san.rr.com> wrote:

> Jan Böcker wrote:
> > On 28.04.2010 20:30, Joe Riel wrote:
> >   
> >> The hyperlink syntax allows specifying a line number, however,
> >> that doesn't do anything (other than force the document to
> >> be opened inside of emacs) with a non-text file (say a pdf).
> >>
> >> Is therea an extension to allow specifying a page number
> >> so that a link to a pdf is opened at the specified page?
> >>     
> >
> > There is in the current git version, its not yet documented though.
> >
> >
> > Add an entry to the variable org-file-apps like this:
> > ("\\.pdf::\\([0-9]+\\)\\'" . "evince \"%s\" -p %1")
> >
> > Or as seen in the customize interface:
> > Extension: \.pdf::\([0-9]+\)\'
> > Command:   evince "%s" -p %1
> >
> > The subexpression \([0-9]+\) in the regex captures the page number,
> > which replaces the %1 in the command string. (This example assumes you
> > want to open your PDFs with evince, which accepts a page number after
> > the -p option.)
> >
> > You can then reference a specific page of a PDF like this:
> > [[file:/path/to/document.pdf::42]]
> >
> > I had planned to document this yesterday, but unfortunately spent the
> > better part of the day recovering from a cold. I will send a patch
> > describing how this works, when exactly the new behaviour kicks in and
> > the implications for backwards compatibility as soon as I find time to
> > describe it compactly enough to fit into the docstring.
> >
> > HTH, Jan
> >   
> A related question; can this extension be used with link abbreviations?
> 
> I tried
> 
> #+LINK: sample file:/home/joe/sample.pdf
> 
> with
> 
> [[sample::3]]
> 
> but that does not work.
> 


This happens in org-link-expand-abbrev: it splits sample::3 into
"sample" and "3", looks up "sample" in org-link-abbrev-alist and
performs the replacement, then returns the concatenation of that with
the "3" part, thereby eliminating the "::" marker that would trigger the
further processing necessary to open the pdf file at the given page.

You could try

#+LINK: sample file:/home/joe/sample.pdf::%s

This will work with the [[sample::3]] link, but not with [[sample]].

Alternatively, you could modify the function to keep the "::" marker
(at least conditionally: leave it there if it's already there). That
would make both of the above work and I think all the examples of
section 4.6 would work as well. Here is a very lighly tested patch:

diff --git a/lisp/org.el b/lisp/org.el
index 9920504..3ede9c4 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -7703,6 +7703,7 @@ call CMD."
       (let* ((key (match-string 1 link))
 	     (as (or (assoc key org-link-abbrev-alist-local)
 		     (assoc key org-link-abbrev-alist)))
+	     (colontype (and (match-end 1) (match-beginning 3) (substring (match-string 2 link) 0 (- (match-beginning 3) (match-end 1)))))
 	     (tag (and (match-end 2) (match-string 3 link)))
 	     rpl)
 	(if (not as)
@@ -7713,6 +7714,7 @@ call CMD."
 	   ((string-match "%s" rpl) (replace-match (or tag "") t t rpl))
 	   ((string-match "%h" rpl)
 	    (replace-match (url-hexify-string (or tag "")) t t rpl))
+	   ((string-equal colontype "::") (concat rpl colontype tag))
 	   (t (concat rpl tag)))))
     link))

HTH,
Nick

  reply	other threads:[~2010-04-30  8:10 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-28 18:30 Specify page number in hyperlink [to pdf] Joe Riel
2010-04-29 19:22 ` Jan Böcker
2010-04-30  4:27   ` Joe Riel
2010-04-30  4:43   ` Joe Riel
2010-04-30  8:10     ` Nick Dokos [this message]
2010-04-30 13:05       ` Jan Böcker
2010-04-30 15:24         ` Nick Dokos
2010-04-30 15:28           ` Carsten Dominik
2010-04-30 14:28       ` Joe Riel
2010-04-30 16:03         ` Nick Dokos
2010-04-30 17:23           ` Joe Riel

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=26943.1272615034@gamaville.dokosmarshall.org \
    --to=nicholas.dokos@hp.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=joer@san.rr.com \
    /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).