From: Georges Ko <gko@gko.net> To: emacs-orgmode@gnu.org Subject: Link to open PDF at a specific page Date: Sat, 14 Nov 2020 16:46:24 +0800 Message-ID: <yqc2amtzkuxzz.fsf@gko.net> (raw) Hi, I'd like to open a PDF file to a specific page from a link, using the default PDF viewer in Windows (same as w32-shell-execute "open"), which opens a browser. With a browser, I can open it with this HTML link: <a href="file:///c:/a/b/c/file.pdf#page=4">Page 4</a> This link as an Org mode link doesn't work: file:///c:/a/b/c/file.pdf#page=4 as "#page=4" is interpreted as part of the filename by w32-shell-execute. If I modify org-file-apps for PDF to: ("\\.pdf::\\([0-9]+\\)\\'" . "browser file:///%s#page=%1") and if the Org link is: file:///c:/a/b/c/file.pdf::4 it doesn't work because the argument passed to browser is: file:///"c:/a/b/c/file.pdf"#page=4 A quick workaround is to modify org-open-file by removing shell-quote-argument, from: (shell-quote-argument (convert-standard-filename file)) to (convert-standard-filename file) to get the following string, which correctly opens page 4. "file:///c:/a/b/c/file.pdf#page=4" If I export the file as HTML, it is output as: <a href="file:///c:/a/b/c/file.pdf#MissingReference">...</a> so I modified org-html-link from: (concat raw-path "#" (org-publish-resolve-external-link option path t)) to (concat raw-path "#" (let ((r (org-publish-resolve-external-link option path t))) (or (and (string= r "MissingReference") (string-match "\\.pdf\\'" path) (string-match "[0-9]+" option) (format "page=%s" option)) r))) which generates the wanted HTML link: <a href="file:///c:/a/b/c/file.pdf#page=4">...</a> Is there any way less quick & dirty to achieve this? Thanks!
next reply other threads:[~2020-11-14 8:47 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-11-14 8:46 Georges Ko [this message] 2020-11-14 11:34 ` Jean Louis
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://orgmode.org * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=yqc2amtzkuxzz.fsf@gko.net \ --to=gko@gko.net \ --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
Org-mode mailing list This inbox may be cloned and mirrored by anyone: git clone --mirror https://orgmode.org/list/0 list/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 list list/ https://orgmode.org/list \ emacs-orgmode@gnu.org public-inbox-index list Example config snippet for mirrors. Newsgroups are available over NNTP: nntp://news.yhetil.org/yhetil.emacs.orgmode nntp://news.gmane.io/gmane.emacs.orgmode AGPL code for this site: git clone https://public-inbox.org/public-inbox.git