Add docview link type (open files in doc-view mode at a specific page)

This commit is contained in:
Jan Böcker 2009-11-29 17:21:04 +01:00
parent ed69cd7f3b
commit 9f1fd65a06
4 changed files with 90 additions and 1 deletions

View File

@ -2760,6 +2760,7 @@ file:sometextfile::NNN @r{file with line number to jump to}
file:projects.org @r{another Org file} file:projects.org @r{another Org file}
file:projects.org::some words @r{text search in Org file} file:projects.org::some words @r{text search in Org file}
file:projects.org::*task title @r{heading search in Org file} file:projects.org::*task title @r{heading search in Org file}
docview:papers/last.pdf::NNN @r{file with page number to open in doc-view mode}
id:B7423F4D-2E8A-471B-8810-C40F074717E9 @r{Link to heading by ID} id:B7423F4D-2E8A-471B-8810-C40F074717E9 @r{Link to heading by ID}
news:comp.emacs @r{Usenet link} news:comp.emacs @r{Usenet link}
mailto:adent@@galaxy.net @r{Mail link} mailto:adent@@galaxy.net @r{Mail link}

View File

@ -5,6 +5,10 @@
* org.el (org-inside-latex-macro-p): Save match data. * org.el (org-inside-latex-macro-p): Save match data.
2009-11-28 Jan Böcker <jan.boecker@jboecker.de>
* org-docview.el: New file.
2009-11-27 Carsten Dominik <carsten.dominik@gmail.com> 2009-11-27 Carsten Dominik <carsten.dominik@gmail.com>
* org-latex.el (org-export-latex-class-options): New variable. * org-latex.el (org-export-latex-class-options): New variable.

83
lisp/org-docview.el Normal file
View File

@ -0,0 +1,83 @@
;;; org-docview.el --- support for links to doc-view-mode buffers
;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
;; Free Software Foundation, Inc.
;; Author: Jan Böcker <jan.boecker at jboecker dot de>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.33trans
;;
;; This file is part of GNU Emacs.
;;
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Commentary:
;; This file implements links to open files in doc-view-mode.
;; Org-mode loads this module by default - if this is not what you want,
;; configure the variable `org-modules'.
;; The links take the form
;;
;; docview:<file path>::<page number>
;;
;; for example: [[docview:~/.elisp/org/doc/org.pdf::1][Org-Mode Manual]]
;;
;; Autocompletion for inserting links is supported; you will be
;; prompted for a file and a page number.
;;
;; If you use org-store-link in a doc-view mode buffer, the stored
;; link will point to the current page.
;;; Code:
(require 'org)
(org-add-link-type "docview" 'org-docview-open)
(add-hook 'org-store-link-functions 'org-docview-store-link)
(defun org-docview-open (link)
(when (string-match "\\(.*\\)::\\([0-9]+\\)$" link)
(let* ((path (match-string 1 link))
(page (string-to-number (match-string 2 link))))
(org-open-file path 1) ;; let org-mode open the file (in-emacs = 1)
;; to ensure org-link-frame-setup is respected
(doc-view-goto-page page)
)))
(defun org-docview-store-link ()
"Store a link to a docview buffer"
(when (eq major-mode 'doc-view-mode)
;; This buffer is in doc-view-mode
(let* ((path buffer-file-name)
(page (doc-view-current-page))
(link (concat "docview:" path "::" (number-to-string page)))
(description ""))
(org-store-link-props
:type "docview"
:link link
:description path))))
(defun org-docview-complete-link ()
"Use the existing file name completion for file: links to get the file name,
then ask the user for the page number and append it."
(concat (replace-regexp-in-string "^file:" "docview:" (org-file-complete-link))
"::"
(read-from-minibuffer "Page:" "1")))
(provide 'org-docview)

View File

@ -170,7 +170,7 @@ With prefix arg HERE, insert it at point."
(let ((a (member 'org-infojs org-modules))) (let ((a (member 'org-infojs org-modules)))
(and a (setcar a 'org-jsinfo)))) (and a (setcar a 'org-jsinfo))))
(defcustom org-modules '(org-bbdb org-bibtex org-gnus org-info org-jsinfo org-irc org-mew org-mhe org-rmail org-vm org-w3m org-wl) (defcustom org-modules '(org-bbdb org-bibtex org-docview org-gnus org-info org-jsinfo org-irc org-mew org-mhe org-rmail org-vm org-w3m org-wl)
"Modules that should always be loaded together with org.el. "Modules that should always be loaded together with org.el.
If a description starts with <C>, the file is not part of Emacs If a description starts with <C>, the file is not part of Emacs
and loading it will require that you have downloaded and properly installed and loading it will require that you have downloaded and properly installed
@ -189,6 +189,7 @@ to add the symbol `xyz', and the package must have a call to
(const :tag " bbdb: Links to BBDB entries" org-bbdb) (const :tag " bbdb: Links to BBDB entries" org-bbdb)
(const :tag " bibtex: Links to BibTeX entries" org-bibtex) (const :tag " bibtex: Links to BibTeX entries" org-bibtex)
(const :tag " crypt: Encryption of subtrees" org-crypt) (const :tag " crypt: Encryption of subtrees" org-crypt)
(const :tag " docview: Links to doc-view buffers" org-docview)
(const :tag " gnus: Links to GNUS folders/messages" org-gnus) (const :tag " gnus: Links to GNUS folders/messages" org-gnus)
(const :tag " id: Global IDs for identifying entries" org-id) (const :tag " id: Global IDs for identifying entries" org-id)
(const :tag " info: Links to Info nodes" org-info) (const :tag " info: Links to Info nodes" org-info)