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
next prev parent 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).