annotate lisp/doc-view.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents fa4400531412
children 6957ace4e43f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1 ;;; doc-view.el --- View PDF/PostScript/DVI files in Emacs
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
2
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106467
diff changeset
3 ;; Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
4 ;;
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
5 ;; Author: Tassilo Horn <tassilo@member.fsf.org>
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
6 ;; Maintainer: Tassilo Horn <tassilo@member.fsf.org>
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
7 ;; Keywords: files, pdf, ps, dvi
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
8
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
10
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94443
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94443
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94443
diff changeset
14 ;; (at your option) any later version.
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
15
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
20
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94443
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
23
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
24 ;;; Requirements:
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
25
85367
1fbaddcbc4ec Mention xpdf. Fix spelling of Ghostscript.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85029
diff changeset
26 ;; doc-view.el requires GNU Emacs 22.1 or newer. You also need Ghostscript,
94092
41edf72809eb Changed requirements section to tell that only one
Tassilo Horn <tassilo@member.fsf.org>
parents: 94080
diff changeset
27 ;; `dvipdf' (comes with Ghostscript) or `dvipdfm' (comes with teTeX or TeXLive)
41edf72809eb Changed requirements section to tell that only one
Tassilo Horn <tassilo@member.fsf.org>
parents: 94080
diff changeset
28 ;; and `pdftotext', which comes with xpdf (http://www.foolabs.com/xpdf/) or
41edf72809eb Changed requirements section to tell that only one
Tassilo Horn <tassilo@member.fsf.org>
parents: 94080
diff changeset
29 ;; poppler (http://poppler.freedesktop.org/).
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
30
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
31 ;;; Commentary:
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
32
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
33 ;; DocView is a document viewer for Emacs. It converts PDF, PS and DVI files
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
34 ;; to a set of PNG files, one PNG for each page, and displays the PNG images
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
35 ;; inside an Emacs buffer. This buffer uses `doc-view-mode' which provides
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
36 ;; convenient key bindings for browsing the document.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
37 ;;
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
38 ;; To use it simply open a document file with
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
39 ;;
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
40 ;; C-x C-f ~/path/to/document RET
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
41 ;;
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
42 ;; and the document will be converted and displayed, if your emacs supports png
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
43 ;; images. With `C-c C-c' you can toggle between the rendered images
85815
960b3c592913 (doc-view-conversion-refresh-interval)
Glenn Morris <rgm@gnu.org>
parents: 85805
diff changeset
44 ;; representation and the source text representation of the document.
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
45 ;;
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
46 ;; Since conversion may take some time all the PNG images are cached in a
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
47 ;; subdirectory of `doc-view-cache-directory' and reused when you want to view
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
48 ;; that file again. To reconvert a document hit `g' (`doc-view-reconvert-doc')
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
49 ;; when displaying the document. To delete all cached files use
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
50 ;; `doc-view-clear-cache'. To open the cache with dired, so that you can tidy
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
51 ;; it out use `doc-view-dired-cache'.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
52 ;;
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
53 ;; When conversion in underway the first page will be displayed as soon as it
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
54 ;; is available and the available pages are refreshed every
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
55 ;; `doc-view-conversion-refresh-interval' seconds. If that variable is nil the
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
56 ;; pages won't be displayed before conversion of the document finished
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
57 ;; completely.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
58 ;;
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
59 ;; DocView lets you select a slice of the displayed pages. This slice will be
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
60 ;; remembered and applied to all pages of the current document. This enables
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
61 ;; you to cut away the margins of a document to save some space. To select a
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
62 ;; slice you can use `doc-view-set-slice' (bound to `s s') which will query you
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
63 ;; for the coordinates of the slice's top-left corner and its width and height.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
64 ;; A much more convenient way to do the same is offered by the command
102358
07bc423d78f1 Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 101909
diff changeset
65 ;; `doc-view-set-slice-using-mouse' (bound to `s m'). After invocation you
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
66 ;; only have to press mouse-1 at the top-left corner and drag it to the
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
67 ;; bottom-right corner of the desired slice. To reset the slice use
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
68 ;; `doc-view-reset-slice' (bound to `s r').
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
69 ;;
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
70 ;; You can also search within the document. The command `doc-view-search'
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
71 ;; (bound to `C-s') queries for a search regexp and initializes a list of all
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
72 ;; matching pages and messages how many match-pages were found. After that you
86025
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
73 ;; can jump to the next page containing a match with an additional `C-s'. With
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
74 ;; `C-r' you can do the same, but backwards. To search for a new regexp give a
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
75 ;; prefix arg to one of the search functions, e.g. by typing `C-u C-s'. The
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
76 ;; searching works by using a plain text representation of the document. If
102358
07bc423d78f1 Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 101909
diff changeset
77 ;; that doesn't already exist the first invocation of `doc-view-search' (or
86025
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
78 ;; `doc-view-search-backward') starts the conversion. When that finishes and
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
79 ;; you're still viewing the document (i.e. you didn't switch to another buffer)
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
80 ;; you're queried for the regexp then.
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
81 ;;
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
82 ;; Dired users can simply hit `v' on a document file. If it's a PS, PDF or DVI
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
83 ;; it will be opened using `doc-view-mode'.
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
84 ;;
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
85
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
86 ;;; Configuration:
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
87
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
88 ;; If the images are too small or too big you should set the "-rXXX" option in
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
89 ;; `doc-view-ghostscript-options' to another value. (The bigger your screen,
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
90 ;; the higher the value.)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
91 ;;
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
92 ;; This and all other options can be set with the customization interface.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
93 ;; Simply do
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
94 ;;
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
95 ;; M-x customize-group RET doc-view RET
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
96 ;;
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
97 ;; and modify them to your needs.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
98
86035
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
99 ;;; Todo:
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
100
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
101 ;; - add print command.
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
102 ;; - share more code with image-mode.
85801
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
103 ;; - better menu.
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
104 ;; - Bind slicing to a drag event.
92759
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
105 ;; - doc-view-fit-doc-to-window and doc-view-fit-window-to-doc?
87842
3a98637489f5 (doc-view-pdf/ps->png): Make sure we a have a valid cwd.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87697
diff changeset
106 ;; - zoom the region around the cursor (like xdvi).
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
107 ;; - get rid of the silly arrow in the fringe.
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
108 ;; - improve anti-aliasing (pdf-utils gets it better).
85801
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
109
86035
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
110 ;;;; About isearch support
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
111
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
112 ;; I tried implementing isearch by setting
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
113 ;; `isearch-search-fun-function' buffer-locally, but that didn't
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
114 ;; work too good. The function doing the real search was called
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
115 ;; endlessly somehow. But even if we'd get that working no real
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
116 ;; isearch feeling comes up due to the missing match highlighting.
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
117 ;; Currently I display all lines containing a match in a tooltip and
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
118 ;; each C-s or C-r jumps directly to the next/previous page with a
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
119 ;; match. With isearch we could only display the current match. So
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
120 ;; we had to decide if another C-s jumps to the next page with a
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
121 ;; match (thus only the first match in a page will be displayed in a
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
122 ;; tooltip) or to the next match, which would do nothing visible
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
123 ;; (except the tooltip) if the next match is on the same page.
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
124
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
125 ;; And it's much slower than the current search facility, because
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
126 ;; isearch really searches for each step forward or backward wheras
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
127 ;; the current approach searches once and then it knows to which
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
128 ;; pages to jump.
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
129
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
130 ;; Anyway, if someone with better isearch knowledge wants to give it a try,
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
131 ;; feel free to do it. --Tassilo
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
132
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
133 ;;; Code:
d3745283de5f Add comments about isearch support.
Juri Linkov <juri@jurta.org>
parents: 86025
diff changeset
134
93048
7a4d478a79d1 (require): Require cl at compile time because
Tassilo Horn <tassilo@member.fsf.org>
parents: 93004
diff changeset
135 (eval-when-compile (require 'cl))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
136 (require 'dired)
85420
de8f3f575afc (doc-view-mode-map): Use the image-mode scrolling commands. Don't rebind C-x k.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85419
diff changeset
137 (require 'image-mode)
86025
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
138 (require 'jka-compr)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
139
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
140 ;;;; Customization Options
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
141
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
142 (defgroup doc-view nil
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
143 "In-buffer viewer for PDF, PostScript and DVI files."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
144 :link '(function-link doc-view)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
145 :version "22.2"
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
146 :group 'applications
107167
f6b8c73548b3 Minor tweaks to custom groups.
Chong Yidong <cyd@stupidchicken.com>
parents: 107096
diff changeset
147 :group 'data
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
148 :group 'multimedia
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
149 :prefix "doc-view-")
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
150
85421
fbc2287ee475 Remove version keyword.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85420
diff changeset
151 (defcustom doc-view-ghostscript-program (executable-find "gs")
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
152 "Program to convert PS and PDF files to PNG."
85421
fbc2287ee475 Remove version keyword.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85420
diff changeset
153 :type 'file
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
154 :group 'doc-view)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
155
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
156 (defcustom doc-view-ghostscript-options
85418
26dcc1207f42 (doc-view-ghostscript-options, doc-view-ps->pdf):
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85369
diff changeset
157 '("-dSAFER" ;; Avoid security problems when rendering files from untrusted
26dcc1207f42 (doc-view-ghostscript-options, doc-view-ps->pdf):
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85369
diff changeset
158 ;; sources.
26dcc1207f42 (doc-view-ghostscript-options, doc-view-ps->pdf):
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85369
diff changeset
159 "-dNOPAUSE" "-sDEVICE=png16m" "-dTextAlphaBits=4"
86119
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
160 "-dBATCH" "-dGraphicsAlphaBits=4" "-dQUIET")
85367
1fbaddcbc4ec Mention xpdf. Fix spelling of Ghostscript.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85029
diff changeset
161 "A list of options to give to ghostscript."
85421
fbc2287ee475 Remove version keyword.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85420
diff changeset
162 :type '(repeat string)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
163 :group 'doc-view)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
164
86119
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
165 (defcustom doc-view-resolution 100
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
166 "Dots per inch resolution used to render the documents.
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
167 Higher values result in larger images."
86154
1cdfc94602cb * smime.el (from):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86119
diff changeset
168 :type 'number
1cdfc94602cb * smime.el (from):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86119
diff changeset
169 :group 'doc-view)
86119
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
170
85421
fbc2287ee475 Remove version keyword.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85420
diff changeset
171 (defcustom doc-view-dvipdfm-program (executable-find "dvipdfm")
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
172 "Program to convert DVI files to PDF.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
173
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
174 DVI file will be converted to PDF before the resulting PDF is
94075
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
175 converted to PNG.
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
176
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
177 If this and `doc-view-dvipdf-program' are set,
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
178 `doc-view-dvipdf-program' will be preferred."
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
179 :type 'file
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
180 :group 'doc-view)
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
181
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
182 (defcustom doc-view-dvipdf-program (executable-find "dvipdf")
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
183 "Program to convert DVI files to PDF.
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
184
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
185 DVI file will be converted to PDF before the resulting PDF is
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
186 converted to PNG.
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
187
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
188 If this and `doc-view-dvipdfm-program' are set,
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
189 `doc-view-dvipdf-program' will be preferred."
85421
fbc2287ee475 Remove version keyword.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85420
diff changeset
190 :type 'file
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
191 :group 'doc-view)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
192
85421
fbc2287ee475 Remove version keyword.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85420
diff changeset
193 (defcustom doc-view-ps2pdf-program (executable-find "ps2pdf")
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
194 "Program to convert PS files to PDF.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
195
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
196 PS files will be converted to PDF before searching is possible."
85421
fbc2287ee475 Remove version keyword.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85420
diff changeset
197 :type 'file
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
198 :group 'doc-view)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
199
85421
fbc2287ee475 Remove version keyword.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85420
diff changeset
200 (defcustom doc-view-pdftotext-program (executable-find "pdftotext")
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
201 "Program to convert PDF files to plain text.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
202
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
203 Needed for searching."
85421
fbc2287ee475 Remove version keyword.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85420
diff changeset
204 :type 'file
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
205 :group 'doc-view)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
206
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
207 (defcustom doc-view-cache-directory
85856
a26944b15c75 (doc-view-cache-directory): Remove superfluous concat.
Glenn Morris <rgm@gnu.org>
parents: 85844
diff changeset
208 (expand-file-name (format "docview%d" (user-uid))
85844
cf0d3de08293 * doc-view.el (doc-view-cache-directory): Fix bug where an integer
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85843
diff changeset
209 temporary-file-directory)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
210 "The base directory, where the PNG images will be saved."
85421
fbc2287ee475 Remove version keyword.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85420
diff changeset
211 :type 'directory
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
212 :group 'doc-view)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
213
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
214 (defvar doc-view-conversion-buffer " *doc-view conversion output*"
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
215 "The buffer where messages from the converter programs go to.")
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
216
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
217 (defcustom doc-view-conversion-refresh-interval 1
85815
960b3c592913 (doc-view-conversion-refresh-interval)
Glenn Morris <rgm@gnu.org>
parents: 85805
diff changeset
218 "Interval in seconds between refreshes of the DocView buffer while converting.
960b3c592913 (doc-view-conversion-refresh-interval)
Glenn Morris <rgm@gnu.org>
parents: 85805
diff changeset
219 After such a refresh newly converted pages will be available for
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
220 viewing. If set to nil there won't be any refreshes and the
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
221 pages won't be displayed before conversion of the whole document
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
222 has finished."
85421
fbc2287ee475 Remove version keyword.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85420
diff changeset
223 :type 'integer
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
224 :group 'doc-view)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
225
106327
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
226 (defcustom doc-view-continuous nil
106207
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
227 "In Continuous mode reaching the page edge advances to next/previous page.
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
228 When non-nil, scrolling a line upward at the bottom edge of the page
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
229 moves to the next page, and scrolling a line downward at the top edge
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
230 of the page moves to the previous page."
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
231 :type 'boolean
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
232 :group 'doc-view
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
233 :version "23.2")
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
234
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
235 ;;;; Internal Variables
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
236
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
237 (defun doc-view-new-window-function (winprops)
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
238 (let ((ol (image-mode-window-get 'overlay winprops)))
107069
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
239 (when (and ol (not (overlay-buffer ol)))
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
240 ;; I've seen `ol' be a dead overlay. I do not yet know how this
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
241 ;; happened, so maybe the bug is elsewhere, but in the mean time,
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
242 ;; this seems like a safe approach.
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
243 (setq ol nil))
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
244 (if ol
107069
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
245 (progn
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
246 (assert (eq (overlay-buffer ol) (current-buffer)))
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
247 (setq ol (copy-overlay ol)))
94443
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
248 (assert (not (get-char-property (point-min) 'display)))
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
249 (setq ol (make-overlay (point-min) (point-max) nil t))
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
250 (overlay-put ol 'doc-view t))
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
251 (overlay-put ol 'window (car winprops))
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
252 (image-mode-window-put 'overlay ol winprops)))
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
253
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
254 (defvar doc-view-current-files nil
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
255 "Only used internally.")
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
256 (make-variable-buffer-local 'doc-view-current-files)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
257
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
258 (defvar doc-view-current-converter-processes nil
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
259 "Only used internally.")
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
260 (make-variable-buffer-local 'doc-view-current-converter-processes)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
261
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
262 (defvar doc-view-current-timer nil
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
263 "Only used internally.")
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
264 (make-variable-buffer-local 'doc-view-current-timer)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
265
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
266 (defvar doc-view-current-cache-dir nil
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
267 "Only used internally.")
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
268 (make-variable-buffer-local 'doc-view-current-cache-dir)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
269
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
270 (defvar doc-view-current-search-matches nil
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
271 "Only used internally.")
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
272 (make-variable-buffer-local 'doc-view-current-search-matches)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
273
87006
a15ce3ca213a (doc-view-initiate-display): Use `doc-view-mode-p'.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86441
diff changeset
274 (defvar doc-view-pending-cache-flush nil
a15ce3ca213a (doc-view-initiate-display): Use `doc-view-mode-p'.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86441
diff changeset
275 "Only used internally.")
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
276
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
277 (defvar doc-view-previous-major-mode nil
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
278 "Only used internally.")
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
279
87697
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
280 (defvar doc-view-buffer-file-name nil
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
281 "Only used internally.
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
282 The file name used for conversion. Normally it's the same as
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
283 `buffer-file-name', but for remote files, compressed files and
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
284 files inside an archive it is a temporary copy of
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
285 the (uncompressed, extracted) file residing in
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
286 `doc-view-cache-directory'.")
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
287
92759
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
288 (defvar doc-view-doc-type nil
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
289 "The type of document in the current buffer.
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
290 Can be `dvi', `pdf', or `ps'.")
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
291
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
292 ;;;; DocView Keymaps
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
293
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
294 (defvar doc-view-mode-map
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
295 (let ((map (make-sparse-keymap)))
95508
88781ac6a1be * image-mode.el (image-mode-map): Suppress key map and bind `q'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95363
diff changeset
296 (set-keymap-parent map image-mode-map)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
297 ;; Navigation in the document
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
298 (define-key map (kbd "n") 'doc-view-next-page)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
299 (define-key map (kbd "p") 'doc-view-previous-page)
85444
a3364ed63fcd (doc-view-mode-map): Use remapping.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85421
diff changeset
300 (define-key map (kbd "<next>") 'forward-page)
a3364ed63fcd (doc-view-mode-map): Use remapping.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85421
diff changeset
301 (define-key map (kbd "<prior>") 'backward-page)
a3364ed63fcd (doc-view-mode-map): Use remapping.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85421
diff changeset
302 (define-key map [remap forward-page] 'doc-view-next-page)
a3364ed63fcd (doc-view-mode-map): Use remapping.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85421
diff changeset
303 (define-key map [remap backward-page] 'doc-view-previous-page)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
304 (define-key map (kbd "SPC") 'doc-view-scroll-up-or-next-page)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
305 (define-key map (kbd "DEL") 'doc-view-scroll-down-or-previous-page)
106207
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
306 (define-key map (kbd "C-n") 'doc-view-next-line-or-next-page)
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
307 (define-key map (kbd "<down>") 'doc-view-next-line-or-next-page)
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
308 (define-key map (kbd "C-p") 'doc-view-previous-line-or-previous-page)
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
309 (define-key map (kbd "<up>") 'doc-view-previous-line-or-previous-page)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
310 (define-key map (kbd "M-<") 'doc-view-first-page)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
311 (define-key map (kbd "M->") 'doc-view-last-page)
85843
05357c175a50 (doc-view-mode-map): Bind doc-view-goto-page to the keys
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85815
diff changeset
312 (define-key map [remap goto-line] 'doc-view-goto-page)
102541
cdeea75795b2 (doc-view-mode-map): Bind RET to image-next-line.
Tassilo Horn <tassilo@member.fsf.org>
parents: 102470
diff changeset
313 (define-key map (kbd "RET") 'image-next-line)
86119
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
314 ;; Zoom in/out.
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
315 (define-key map "+" 'doc-view-enlarge)
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
316 (define-key map "-" 'doc-view-shrink)
95508
88781ac6a1be * image-mode.el (image-mode-map): Suppress key map and bind `q'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95363
diff changeset
317 ;; Killing the buffer (and the process)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
318 (define-key map (kbd "k") 'doc-view-kill-proc-and-buffer)
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
319 (define-key map (kbd "K") 'doc-view-kill-proc)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
320 ;; Slicing the image
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
321 (define-key map (kbd "s s") 'doc-view-set-slice)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
322 (define-key map (kbd "s m") 'doc-view-set-slice-using-mouse)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
323 (define-key map (kbd "s r") 'doc-view-reset-slice)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
324 ;; Searching
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
325 (define-key map (kbd "C-s") 'doc-view-search)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
326 (define-key map (kbd "<find>") 'doc-view-search)
86025
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
327 (define-key map (kbd "C-r") 'doc-view-search-backward)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
328 ;; Show the tooltip
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
329 (define-key map (kbd "C-t") 'doc-view-show-tooltip)
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
330 ;; Toggle between text and image display or editing
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
331 (define-key map (kbd "C-c C-c") 'doc-view-toggle-display)
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
332 ;; Open a new buffer with doc's text contents
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
333 (define-key map (kbd "C-c C-t") 'doc-view-open-text)
107069
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
334 ;; Reconvert the current document. Don't just use revert-buffer
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
335 ;; because that resets the scale factor, the page number, ...
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
336 (define-key map (kbd "g") 'doc-view-revert-buffer)
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
337 (define-key map (kbd "r") 'doc-view-revert-buffer)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
338 map)
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
339 "Keymap used by `doc-view-mode' when displaying a doc as a set of images.")
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
340
107069
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
341 (defun doc-view-revert-buffer (&optional ignore-auto noconfirm)
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
342 "Like `revert-buffer', but preserves the buffer's current modes."
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
343 ;; FIXME: this should probably be moved to files.el and used for
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
344 ;; most/all "g" bindings to revert-buffer.
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
345 (interactive (list (not current-prefix-arg)))
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
346 (revert-buffer ignore-auto noconfirm 'preserve-modes))
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
347
3ce5dcdece39 (doc-view-new-window-function): Be a bit more defensive.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
348
85801
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
349 (easy-menu-define doc-view-menu doc-view-mode-map
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
350 "Menu for Doc View mode."
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
351 '("DocView"
106327
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
352 ["Toggle display" doc-view-toggle-display]
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
353 ("Continuous"
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
354 ["Off" (setq doc-view-continuous nil)
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
355 :style radio :selected (eq doc-view-continuous nil)]
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
356 ["On" (setq doc-view-continuous t)
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
357 :style radio :selected (eq doc-view-continuous t)]
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
358 "---"
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
359 ["Save as Default"
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
360 (customize-save-variable 'doc-view-continuous doc-view-continuous) t]
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
361 )
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
362 "---"
85801
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
363 ["Set Slice" doc-view-set-slice-using-mouse]
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
364 ["Set Slice (manual)" doc-view-set-slice]
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
365 ["Reset Slice" doc-view-reset-slice]
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
366 "---"
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
367 ["Search" doc-view-search]
86025
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
368 ["Search Backwards" doc-view-search-backward]
85801
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
369 ))
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
370
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
371 (defvar doc-view-minor-mode-map
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
372 (let ((map (make-sparse-keymap)))
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
373 ;; Toggle between text and image display or editing
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
374 (define-key map (kbd "C-c C-c") 'doc-view-toggle-display)
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
375 map)
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
376 "Keymap used by `doc-minor-view-mode'.")
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
377
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
378 ;;;; Navigation Commands
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
379
92224
5f0de7ccefc4 (doc-view-current-page): Add a `win' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92220
diff changeset
380 (defmacro doc-view-current-page (&optional win)
5f0de7ccefc4 (doc-view-current-page): Add a `win' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92220
diff changeset
381 `(image-mode-window-get 'page ,win))
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
382 (defmacro doc-view-current-info () `(image-mode-window-get 'info))
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
383 (defmacro doc-view-current-overlay () `(image-mode-window-get 'overlay))
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
384 (defmacro doc-view-current-image () `(image-mode-window-get 'image))
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
385 (defmacro doc-view-current-slice () `(image-mode-window-get 'slice))
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
386
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
387 (defun doc-view-last-page-number ()
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
388 (length doc-view-current-files))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
389
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
390 (defun doc-view-goto-page (page)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
391 "View the page given by PAGE."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
392 (interactive "nPage: ")
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
393 (let ((len (doc-view-last-page-number))
101909
b62aecf6b1db (doc-view-scroll-up-or-next-page)
Tassilo Horn <tassilo@member.fsf.org>
parents: 101623
diff changeset
394 (hscroll (window-hscroll)))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
395 (if (< page 1)
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
396 (setq page 1)
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
397 (when (and (> page len)
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
398 ;; As long as the converter is running, we don't know
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
399 ;; how many pages will be available.
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
400 (null doc-view-current-converter-processes))
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
401 (setq page len)))
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
402 (setf (doc-view-current-page) page
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
403 (doc-view-current-info)
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
404 (concat
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
405 (propertize
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
406 (format "Page %d of %d." page len) 'face 'bold)
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
407 ;; Tell user if converting isn't finished yet
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
408 (if doc-view-current-converter-processes
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
409 " (still converting...)\n"
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
410 "\n")
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
411 ;; Display context infos if this page matches the last search
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
412 (when (and doc-view-current-search-matches
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
413 (assq page doc-view-current-search-matches))
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
414 (concat (propertize "Search matches:\n" 'face 'bold)
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
415 (let ((contexts ""))
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
416 (dolist (m (cdr (assq page
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
417 doc-view-current-search-matches)))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
418 (setq contexts (concat contexts " - \"" m "\"\n")))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
419 contexts)))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
420 ;; Update the buffer
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
421 ;; We used to find the file name from doc-view-current-files but
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
422 ;; that's not right if the pages are not generated sequentially
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
423 ;; or if the page isn't in doc-view-current-files yet.
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
424 (let ((file (expand-file-name (format "page-%d.png" page)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
425 (doc-view-current-cache-dir))))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
426 (doc-view-insert-image file :pointer 'arrow)
101909
b62aecf6b1db (doc-view-scroll-up-or-next-page)
Tassilo Horn <tassilo@member.fsf.org>
parents: 101623
diff changeset
427 (set-window-hscroll (selected-window) hscroll)
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
428 (when (and (not (file-exists-p file))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
429 doc-view-current-converter-processes)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
430 ;; The PNG file hasn't been generated yet.
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
431 (doc-view-pdf->png-1 doc-view-buffer-file-name file page
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
432 (lexical-let ((page page)
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
433 (win (selected-window))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
434 (file file))
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
435 (lambda ()
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
436 (and (eq (current-buffer) (window-buffer win))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
437 ;; If we changed page in the mean
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
438 ;; time, don't mess things up.
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
439 (eq (doc-view-current-page win) page)
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
440 ;; Make sure we don't infloop.
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
441 (file-readable-p file)
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
442 (with-selected-window win
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
443 (doc-view-goto-page page))))))))
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
444 (overlay-put (doc-view-current-overlay)
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
445 'help-echo (doc-view-current-info))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
446
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
447 (defun doc-view-next-page (&optional arg)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
448 "Browse ARG pages forward."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
449 (interactive "p")
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
450 (doc-view-goto-page (+ (doc-view-current-page) (or arg 1))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
451
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
452 (defun doc-view-previous-page (&optional arg)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
453 "Browse ARG pages backward."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
454 (interactive "p")
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
455 (doc-view-goto-page (- (doc-view-current-page) (or arg 1))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
456
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
457 (defun doc-view-first-page ()
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
458 "View the first page."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
459 (interactive)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
460 (doc-view-goto-page 1))
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
461
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
462 (defun doc-view-last-page ()
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
463 "View the last page."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
464 (interactive)
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
465 (doc-view-goto-page (doc-view-last-page-number)))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
466
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
467 (defun doc-view-scroll-up-or-next-page (&optional arg)
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
468 "Scroll page up ARG lines if possible, else goto next page.
106327
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
469 When `doc-view-continuous' is non-nil, scrolling upward
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
470 at the bottom edge of the page moves to the next page.
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
471 Otherwise, goto next page only on typing SPC (ARG is nil)."
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
472 (interactive "P")
106327
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
473 (if (or doc-view-continuous (null arg))
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
474 (let ((hscroll (window-hscroll))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
475 (cur-page (doc-view-current-page)))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
476 (when (= (window-vscroll) (image-scroll-up arg))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
477 (doc-view-next-page)
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
478 (when (/= cur-page (doc-view-current-page))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
479 (image-bob)
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
480 (image-bol 1))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
481 (set-window-hscroll (selected-window) hscroll)))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
482 (image-scroll-up arg)))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
483
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
484 (defun doc-view-scroll-down-or-previous-page (&optional arg)
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
485 "Scroll page down ARG lines if possible, else goto previous page.
106327
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
486 When `doc-view-continuous' is non-nil, scrolling downward
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
487 at the top edge of the page moves to the previous page.
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
488 Otherwise, goto previous page only on typing DEL (ARG is nil)."
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
489 (interactive "P")
106327
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
490 (if (or doc-view-continuous (null arg))
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
491 (let ((hscroll (window-hscroll))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
492 (cur-page (doc-view-current-page)))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
493 (when (= (window-vscroll) (image-scroll-down arg))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
494 (doc-view-previous-page)
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
495 (when (/= cur-page (doc-view-current-page))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
496 (image-eob)
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
497 (image-bol 1))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
498 (set-window-hscroll (selected-window) hscroll)))
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
499 (image-scroll-down arg)))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
500
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
501 (defun doc-view-next-line-or-next-page (&optional arg)
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
502 "Scroll upward by ARG lines if possible, else goto next page.
106327
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
503 When `doc-view-continuous' is non-nil, scrolling a line upward
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
504 at the bottom edge of the page moves to the next page."
106207
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
505 (interactive "p")
106327
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
506 (if doc-view-continuous
106207
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
507 (let ((hscroll (window-hscroll))
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
508 (cur-page (doc-view-current-page)))
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
509 (when (= (window-vscroll) (image-next-line arg))
106207
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
510 (doc-view-next-page)
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
511 (when (/= cur-page (doc-view-current-page))
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
512 (image-bob)
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
513 (image-bol 1))
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
514 (set-window-hscroll (selected-window) hscroll)))
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
515 (image-next-line 1)))
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
516
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
517 (defun doc-view-previous-line-or-previous-page (&optional arg)
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
518 "Scroll downward by ARG lines if possible, else goto previous page.
106327
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
519 When `doc-view-continuous' is non-nil, scrolling a line downward
106207
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
520 at the top edge of the page moves to the previous page."
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
521 (interactive "p")
106327
8cb95e673f03 (doc-view-continuous):
Juri Linkov <juri@jurta.org>
parents: 106242
diff changeset
522 (if doc-view-continuous
106207
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
523 (let ((hscroll (window-hscroll))
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
524 (cur-page (doc-view-current-page)))
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
525 (when (= (window-vscroll) (image-previous-line arg))
106207
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
526 (doc-view-previous-page)
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
527 (when (/= cur-page (doc-view-current-page))
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
528 (image-eob)
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
529 (image-bol 1))
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
530 (set-window-hscroll (selected-window) hscroll)))
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
531 (image-previous-line arg)))
106207
936dfb675acf Implement DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 103948
diff changeset
532
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
533 ;;;; Utility Functions
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
534
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
535 (defun doc-view-kill-proc ()
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
536 "Kill the current converter process(es)."
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
537 (interactive)
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
538 (while (consp doc-view-current-converter-processes)
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
539 (ignore-errors ;; Maybe it's dead already?
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
540 (kill-process (pop doc-view-current-converter-processes))))
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
541 (when doc-view-current-timer
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
542 (cancel-timer doc-view-current-timer)
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
543 (setq doc-view-current-timer nil))
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
544 (setq mode-line-process nil))
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
545
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
546 (defun doc-view-kill-proc-and-buffer ()
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
547 "Kill the current converter process and buffer."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
548 (interactive)
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
549 (doc-view-kill-proc)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
550 (when (eq major-mode 'doc-view-mode)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
551 (kill-buffer (current-buffer))))
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
552
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
553 (defun doc-view-make-safe-dir (dir)
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
554 (condition-case nil
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
555 (let ((umask (default-file-modes)))
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
556 (unwind-protect
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
557 (progn
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
558 ;; Create temp files with strict access rights. It's easy to
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
559 ;; loosen them later, whereas it's impossible to close the
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
560 ;; time-window of loose permissions otherwise.
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
561 (set-default-file-modes #o0700)
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
562 (make-directory dir))
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
563 ;; Reset the umask.
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
564 (set-default-file-modes umask)))
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
565 (file-already-exists
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
566 (if (file-symlink-p dir)
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
567 (error "Danger: %s points to a symbolic link" dir))
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
568 ;; In case it was created earlier with looser rights.
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
569 ;; We could check the mode info returned by file-attributes, but it's
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
570 ;; a pain to parse and it may not tell you what we want under
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
571 ;; non-standard file-systems. So let's just say what we want and let
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
572 ;; the underlying C code and file-system figure it out.
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
573 ;; This also ends up checking a bunch of useful conditions: it makes
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
574 ;; sure we have write-access to the directory and that we own it, thus
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
575 ;; closing a bunch of security holes.
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
576 (set-file-modes dir #o0700))))
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
577
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
578 (defun doc-view-current-cache-dir ()
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
579 "Return the directory where the png files of the current doc should be saved.
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
580 It's a subdirectory of `doc-view-cache-directory'."
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
581 (if doc-view-current-cache-dir
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
582 doc-view-current-cache-dir
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
583 ;; Try and make sure doc-view-cache-directory exists and is safe.
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
584 (doc-view-make-safe-dir doc-view-cache-directory)
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
585 ;; Now compute the subdirectory to use.
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
586 (setq doc-view-current-cache-dir
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
587 (file-name-as-directory
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
588 (expand-file-name
106467
0314d1c68b88 Make it work for non-file buffers (bug#5102).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106327
diff changeset
589 (concat (file-name-nondirectory doc-view-buffer-file-name)
87697
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
590 "-"
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
591 (let ((file doc-view-buffer-file-name))
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
592 (with-temp-buffer
92760
0275e742e0a1 (doc-view-current-cache-dir): Set buffer used for
Tassilo Horn <tassilo@member.fsf.org>
parents: 92759
diff changeset
593 (set-buffer-multibyte nil)
87697
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
594 (insert-file-contents-literally file)
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
595 (md5 (current-buffer)))))
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
596 doc-view-cache-directory)))))
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
597
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
598 (defun doc-view-remove-if (predicate list)
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
599 "Return LIST with all items removed that satisfy PREDICATE."
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
600 (let (new-list)
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
601 (dolist (item list (nreverse new-list))
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
602 (when (not (funcall predicate item))
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
603 (setq new-list (cons item new-list))))))
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
604
86441
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
605 ;;;###autoload
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
606 (defun doc-view-mode-p (type)
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
607 "Return non-nil if image type TYPE is available for `doc-view'.
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
608 Image types are symbols like `dvi', `postscript' or `pdf'."
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
609 (and (display-graphic-p)
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
610 (image-type-available-p 'png)
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
611 (cond
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
612 ((eq type 'dvi)
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
613 (and (doc-view-mode-p 'pdf)
94075
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
614 (or (and doc-view-dvipdf-program
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
615 (executable-find doc-view-dvipdf-program))
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
616 (and doc-view-dvipdfm-program
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
617 (executable-find doc-view-dvipdfm-program)))))
87681
92ee34bb9001 2008-01-09 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87580
diff changeset
618 ((or (eq type 'postscript) (eq type 'ps) (eq type 'eps)
86441
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
619 (eq type 'pdf))
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
620 (and doc-view-ghostscript-program
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
621 (executable-find doc-view-ghostscript-program)))
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
622 (t ;; unknown image type
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
623 nil))))
6934c0956614 (doc-view-mode-p): New function.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 86156
diff changeset
624
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
625 ;;;; Conversion Functions
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
626
86119
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
627 (defvar doc-view-shrink-factor 1.125)
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
628
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
629 (defun doc-view-enlarge (factor)
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
630 "Enlarge the document."
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
631 (interactive (list doc-view-shrink-factor))
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
632 (set (make-local-variable 'doc-view-resolution)
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
633 (* factor doc-view-resolution))
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
634 (doc-view-reconvert-doc))
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
635
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
636 (defun doc-view-shrink (factor)
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
637 "Shrink the document."
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
638 (interactive (list doc-view-shrink-factor))
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
639 (doc-view-enlarge (/ 1.0 factor)))
5b6715f2ee11 (doc-view-ghostscript-options): Remove resolution arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86035
diff changeset
640
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
641 (defun doc-view-reconvert-doc ()
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
642 "Reconvert the current document.
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
643 Should be invoked when the cached images aren't up-to-date."
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
644 (interactive)
85801
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
645 (doc-view-kill-proc)
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
646 ;; Clear the old cached files
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
647 (when (file-exists-p (doc-view-current-cache-dir))
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
648 (delete-directory (doc-view-current-cache-dir) 'recursive))
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
649 (doc-view-initiate-display))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
650
92763
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
651 (defun doc-view-sentinel (proc event)
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
652 "Generic sentinel for doc-view conversion processes."
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
653 (if (not (string-match "finished" event))
92763
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
654 (message "DocView: process %s changed status to %s."
102545
061690191e25 (doc-view-sentinel): Strip trailing newline from event message.
Chong Yidong <cyd@stupidchicken.com>
parents: 102541
diff changeset
655 (process-name proc)
061690191e25 (doc-view-sentinel): Strip trailing newline from event message.
Chong Yidong <cyd@stupidchicken.com>
parents: 102541
diff changeset
656 (if (string-match "\\(.+\\)\n?\\'" event)
061690191e25 (doc-view-sentinel): Strip trailing newline from event message.
Chong Yidong <cyd@stupidchicken.com>
parents: 102541
diff changeset
657 (match-string 1 event)
061690191e25 (doc-view-sentinel): Strip trailing newline from event message.
Chong Yidong <cyd@stupidchicken.com>
parents: 102541
diff changeset
658 event))
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
659 (when (buffer-live-p (process-get proc 'buffer))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
660 (with-current-buffer (process-get proc 'buffer)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
661 (setq doc-view-current-converter-processes
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
662 (delq proc doc-view-current-converter-processes))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
663 (setq mode-line-process
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
664 (if doc-view-current-converter-processes
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
665 (format ":%s" (car doc-view-current-converter-processes))))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
666 (funcall (process-get proc 'callback))))))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
667
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
668 (defun doc-view-start-process (name program args callback)
94073
747b5b0190df (doc-view-start-process): Don't set
Tassilo Horn <tassilo@member.fsf.org>
parents: 93460
diff changeset
669 ;; Make sure the process is started in an existing directory, (rather than
747b5b0190df (doc-view-start-process): Don't set
Tassilo Horn <tassilo@member.fsf.org>
parents: 93460
diff changeset
670 ;; some file-name-handler-managed dir, for example).
747b5b0190df (doc-view-start-process): Don't set
Tassilo Horn <tassilo@member.fsf.org>
parents: 93460
diff changeset
671 (let* ((default-directory (if (file-readable-p default-directory)
747b5b0190df (doc-view-start-process): Don't set
Tassilo Horn <tassilo@member.fsf.org>
parents: 93460
diff changeset
672 default-directory
747b5b0190df (doc-view-start-process): Don't set
Tassilo Horn <tassilo@member.fsf.org>
parents: 93460
diff changeset
673 (expand-file-name "~/")))
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
674 (proc (apply 'start-process name doc-view-conversion-buffer
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
675 program args)))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
676 (push proc doc-view-current-converter-processes)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
677 (setq mode-line-process (list (format ":%s" proc)))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
678 (set-process-sentinel proc 'doc-view-sentinel)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
679 (process-put proc 'buffer (current-buffer))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
680 (process-put proc 'callback callback)))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
681
92763
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
682 (defun doc-view-dvi->pdf (dvi pdf callback)
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
683 "Convert DVI to PDF asynchronously and call CALLBACK when finished."
94075
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
684 ;; Prefer dvipdf over dvipdfm, because the latter has problems if the DVI
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
685 ;; references and includes other PS files.
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
686 (if (and doc-view-dvipdf-program
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
687 (executable-find doc-view-dvipdf-program))
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
688 (doc-view-start-process "dvi->pdf" doc-view-dvipdf-program
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
689 (list dvi pdf)
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
690 callback)
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
691 (doc-view-start-process "dvi->pdf" doc-view-dvipdfm-program
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
692 (list "-o" pdf dvi)
b31c348d0336 * doc-view.el (doc-view-dvipdf-program): New variable.
Tassilo Horn <tassilo@member.fsf.org>
parents: 94073
diff changeset
693 callback)))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
694
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
695
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
696 (defun doc-view-pdf/ps->png (pdf-ps png)
85815
960b3c592913 (doc-view-conversion-refresh-interval)
Glenn Morris <rgm@gnu.org>
parents: 85805
diff changeset
697 "Convert PDF-PS to PNG asynchronously."
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
698 (doc-view-start-process
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
699 "pdf/ps->png" doc-view-ghostscript-program
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
700 (append doc-view-ghostscript-options
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
701 (list (format "-r%d" (round doc-view-resolution))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
702 (concat "-sOutputFile=" png)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
703 pdf-ps))
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
704 (lexical-let ((resolution doc-view-resolution))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
705 (lambda ()
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
706 ;; Only create the resolution file when it's all done, so it also
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
707 ;; serves as a witness that the conversion is complete.
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
708 (write-region (prin1-to-string resolution) nil
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
709 (expand-file-name "resolution.el"
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
710 (doc-view-current-cache-dir))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
711 nil 'silently)
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
712 (when doc-view-current-timer
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
713 (cancel-timer doc-view-current-timer)
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
714 (setq doc-view-current-timer nil))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
715 (doc-view-display (current-buffer) 'force))))
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
716 ;; Update the displayed pages as soon as they're done generating.
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
717 (when doc-view-conversion-refresh-interval
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
718 (setq doc-view-current-timer
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
719 (run-at-time "1 secs" doc-view-conversion-refresh-interval
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
720 'doc-view-display
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
721 (current-buffer)))))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
722
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
723 (defun doc-view-pdf->png-1 (pdf png page callback)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
724 "Convert a PAGE of a PDF file to PNG asynchronously.
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
725 Call CALLBACK with no arguments when done."
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
726 (doc-view-start-process
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
727 "pdf->png-1" doc-view-ghostscript-program
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
728 (append doc-view-ghostscript-options
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
729 (list (format "-r%d" (round doc-view-resolution))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
730 ;; Sadly, `gs' only supports the page-range
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
731 ;; for PDF files.
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
732 (format "-dFirstPage=%d" page)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
733 (format "-dLastPage=%d" page)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
734 (concat "-sOutputFile=" png)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
735 pdf))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
736 callback))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
737
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95508
diff changeset
738 (declare-function clear-image-cache "image.c" (&optional filter))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95508
diff changeset
739
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
740 (defun doc-view-pdf->png (pdf png pages)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
741 "Convert a PDF file to PNG asynchronously.
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
742 Start by converting PAGES, and then the rest."
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
743 (if (null pages)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
744 (doc-view-pdf/ps->png pdf png)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
745 ;; We could render several `pages' with a single process if they're
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
746 ;; (almost) consecutive, but since in 99% of the cases, there'll be only
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
747 ;; a single page anyway, and of the remaining 1%, few cases will have
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
748 ;; consecutive pages, it's not worth the trouble.
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
749 (lexical-let ((pdf pdf) (png png) (rest (cdr pages)))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
750 (doc-view-pdf->png-1
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
751 pdf (format png (car pages)) (car pages)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
752 (lambda ()
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
753 (if rest
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
754 (doc-view-pdf->png pdf png rest)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
755 ;; Yippie, the important pages are done, update the display.
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
756 (clear-image-cache)
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
757 ;; For the windows that have a message (like "Welcome to
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
758 ;; DocView") display property, clearing the image cache is
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
759 ;; not sufficient.
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
760 (dolist (win (get-buffer-window-list (current-buffer) nil 'visible))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
761 (with-selected-window win
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
762 (when (stringp (get-char-property (point-min) 'display))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
763 (doc-view-goto-page (doc-view-current-page)))))
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
764 ;; Convert the rest of the pages.
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
765 (doc-view-pdf/ps->png pdf png)))))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
766
92763
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
767 (defun doc-view-pdf->txt (pdf txt callback)
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
768 "Convert PDF to TXT asynchronously and call CALLBACK when finished."
98845
5eadfa7d3021 (doc-view-pdf->txt, doc-view-ps->pdf): Give an error if the needed
Glenn Morris <rgm@gnu.org>
parents: 98160
diff changeset
769 (or doc-view-pdftotext-program
5eadfa7d3021 (doc-view-pdf->txt, doc-view-ps->pdf): Give an error if the needed
Glenn Morris <rgm@gnu.org>
parents: 98160
diff changeset
770 (error "You need the `pdftotext' program to convert a PDF to text"))
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
771 (doc-view-start-process "pdf->txt" doc-view-pdftotext-program
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
772 (list "-raw" pdf txt)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
773 callback))
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
774
92763
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
775 (defun doc-view-doc->txt (txt callback)
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
776 "Convert the current document to text and call CALLBACK when done."
93004
c378e060aab3 (doc-view-doc->txt, doc-view-convert-current-doc):
Tassilo Horn <tassilo@member.fsf.org>
parents: 92879
diff changeset
777 (make-directory (doc-view-current-cache-dir) t)
92763
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
778 (case doc-view-doc-type
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
779 (pdf
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
780 ;; Doc is a PDF, so convert it to TXT
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
781 (doc-view-pdf->txt doc-view-buffer-file-name txt callback))
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
782 (ps
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
783 ;; Doc is a PS, so convert it to PDF (which will be converted to
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
784 ;; TXT thereafter).
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
785 (lexical-let ((pdf (expand-file-name "doc.pdf"
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
786 (doc-view-current-cache-dir)))
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
787 (txt txt)
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
788 (callback callback))
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
789 (doc-view-ps->pdf doc-view-buffer-file-name pdf
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
790 (lambda () (doc-view-pdf->txt pdf txt callback)))))
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
791 (dvi
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
792 ;; Doc is a DVI. This means that a doc.pdf already exists in its
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
793 ;; cache subdirectory.
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
794 (doc-view-pdf->txt (expand-file-name "doc.pdf"
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
795 (doc-view-current-cache-dir))
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
796 txt callback))
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
797 (t (error "DocView doesn't know what to do"))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
798
92763
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
799 (defun doc-view-ps->pdf (ps pdf callback)
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
800 "Convert PS to PDF asynchronously and call CALLBACK when finished."
98845
5eadfa7d3021 (doc-view-pdf->txt, doc-view-ps->pdf): Give an error if the needed
Glenn Morris <rgm@gnu.org>
parents: 98160
diff changeset
801 (or doc-view-ps2pdf-program
5eadfa7d3021 (doc-view-pdf->txt, doc-view-ps->pdf): Give an error if the needed
Glenn Morris <rgm@gnu.org>
parents: 98160
diff changeset
802 (error "You need the `ps2pdf' program to convert PS to PDF"))
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
803 (doc-view-start-process "ps->pdf" doc-view-ps2pdf-program
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
804 (list
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
805 ;; Avoid security problems when rendering files from
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
806 ;; untrusted sources.
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
807 "-dSAFER"
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
808 ;; in-file and out-file
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
809 ps pdf)
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
810 callback))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
811
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
812 (defun doc-view-active-pages ()
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
813 (let ((pages ()))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
814 (dolist (win (get-buffer-window-list (current-buffer) nil 'visible))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
815 (let ((page (image-mode-window-get 'page win)))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
816 (unless (memq page pages) (push page pages))))
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
817 pages))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
818
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
819 (defun doc-view-convert-current-doc ()
87697
e0467846347e 2008-01-10 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87693
diff changeset
820 "Convert `doc-view-buffer-file-name' to a set of png files, one file per page.
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
821 Those files are saved in the directory given by the function
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
822 `doc-view-current-cache-dir'."
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
823 ;; Let stale files still display while we recompute the new ones, so only
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
824 ;; flush the cache when the conversion is over. One of the reasons why it
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
825 ;; is important to keep displaying the stale page is so that revert-buffer
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
826 ;; preserves the horizontal/vertical scroll settings (which are otherwise
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
827 ;; resets during the redisplay).
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
828 (setq doc-view-pending-cache-flush t)
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
829 (let ((png-file (expand-file-name "page-%d.png"
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
830 (doc-view-current-cache-dir))))
93004
c378e060aab3 (doc-view-doc->txt, doc-view-convert-current-doc):
Tassilo Horn <tassilo@member.fsf.org>
parents: 92879
diff changeset
831 (make-directory (doc-view-current-cache-dir) t)
92759
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
832 (case doc-view-doc-type
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
833 (dvi
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
834 ;; DVI files have to be converted to PDF before Ghostscript can process
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
835 ;; it.
92763
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
836 (lexical-let
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
837 ((pdf (expand-file-name "doc.pdf" doc-view-current-cache-dir))
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
838 (png-file png-file))
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
839 (doc-view-dvi->pdf doc-view-buffer-file-name pdf
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
840 (lambda () (doc-view-pdf/ps->png pdf png-file)))))
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
841 (pdf
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
842 (let ((pages (doc-view-active-pages)))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
843 ;; Convert PDF to PNG images starting with the active pages.
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
844 (doc-view-pdf->png doc-view-buffer-file-name png-file pages)))
92759
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
845 (t
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
846 ;; Convert to PNG images.
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
847 (doc-view-pdf/ps->png doc-view-buffer-file-name png-file)))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
848
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
849 ;;;; Slicing
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
850
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95508
diff changeset
851 (declare-function image-size "image.c" (spec &optional pixels frame))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95508
diff changeset
852
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
853 (defun doc-view-set-slice (x y width height)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
854 "Set the slice of the images that should be displayed.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
855 You can use this function to tell doc-view not to display the
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
856 margins of the document. It prompts for the top-left corner (X
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
857 and Y) of the slice to display and its WIDTH and HEIGHT.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
858
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
859 See `doc-view-set-slice-using-mouse' for a more convenient way to
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
860 do that. To reset the slice use `doc-view-reset-slice'."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
861 (interactive
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
862 (let* ((size (image-size (doc-view-current-image) t))
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
863 (a (read-number (format "Top-left X (0..%d): " (car size))))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
864 (b (read-number (format "Top-left Y (0..%d): " (cdr size))))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
865 (c (read-number (format "Width (0..%d): " (- (car size) a))))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
866 (d (read-number (format "Height (0..%d): " (- (cdr size) b)))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
867 (list a b c d)))
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
868 (setf (doc-view-current-slice) (list x y width height))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
869 ;; Redisplay
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
870 (doc-view-goto-page (doc-view-current-page)))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
871
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
872 (defun doc-view-set-slice-using-mouse ()
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
873 "Set the slice of the images that should be displayed.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
874 You set the slice by pressing mouse-1 at its top-left corner and
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
875 dragging it to its bottom-right corner. See also
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
876 `doc-view-set-slice' and `doc-view-reset-slice'."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
877 (interactive)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
878 (let (x y w h done)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
879 (while (not done)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
880 (let ((e (read-event
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
881 (concat "Press mouse-1 at the top-left corner and "
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
882 "drag it to the bottom-right corner!"))))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
883 (when (eq (car e) 'drag-mouse-1)
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
884 (setq x (car (posn-object-x-y (event-start e))))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
885 (setq y (cdr (posn-object-x-y (event-start e))))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
886 (setq w (- (car (posn-object-x-y (event-end e))) x))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
887 (setq h (- (cdr (posn-object-x-y (event-end e))) y))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
888 (setq done t))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
889 (doc-view-set-slice x y w h)))
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
890
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
891 (defun doc-view-reset-slice ()
85029
63718012f1da (doc-view-dvi->pdf-sentinel, doc-view-reset-slice)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 85027
diff changeset
892 "Reset the current slice.
85815
960b3c592913 (doc-view-conversion-refresh-interval)
Glenn Morris <rgm@gnu.org>
parents: 85805
diff changeset
893 After calling this function whole pages will be visible again."
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
894 (interactive)
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
895 (setf (doc-view-current-slice) nil)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
896 ;; Redisplay
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
897 (doc-view-goto-page (doc-view-current-page)))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
898
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
899 ;;;; Display
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
900
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
901 (defun doc-view-insert-image (file &rest args)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
902 "Insert the given png FILE.
85029
63718012f1da (doc-view-dvi->pdf-sentinel, doc-view-reset-slice)
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 85027
diff changeset
903 ARGS is a list of image descriptors."
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
904 (when doc-view-pending-cache-flush
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
905 (clear-image-cache)
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
906 (setq doc-view-pending-cache-flush nil))
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
907 (let ((ol (doc-view-current-overlay))
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
908 (image (if (and file (file-readable-p file))
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
909 (apply 'create-image file 'png nil args)))
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
910 (slice (doc-view-current-slice)))
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
911 (setf (doc-view-current-image) image)
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
912 (move-overlay ol (point-min) (point-max))
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
913 (overlay-put ol 'display
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
914 (cond
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
915 (image
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
916 (if slice
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
917 (list (cons 'slice slice) image)
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
918 image))
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
919 ;; We're trying to display a page that doesn't exist.
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
920 (doc-view-current-converter-processes
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
921 ;; Maybe the page doesn't exist *yet*.
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
922 "Cannot display this page (yet)!")
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
923 (t
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
924 ;; Typically happens if the conversion process somehow
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
925 ;; failed. Better not signal an error here because it
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
926 ;; could prevent a subsequent reconversion from fixing
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
927 ;; the problem.
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
928 (concat "Cannot display this page!\n"
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
929 "Maybe because of a conversion failure!"))))
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
930 (let ((win (overlay-get ol 'window)))
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
931 (if (stringp (overlay-get ol 'display))
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
932 (progn ;Make sure the text is not scrolled out of view.
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
933 (set-window-hscroll win 0)
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
934 (set-window-vscroll win 0))
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
935 (let ((hscroll (image-mode-window-get 'hscroll win))
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
936 (vscroll (image-mode-window-get 'vscroll win)))
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
937 ;; Reset scroll settings, in case they were changed.
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
938 (if hscroll (set-window-hscroll win hscroll))
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
939 (if vscroll (set-window-vscroll win vscroll)))))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
940
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
941 (defun doc-view-sort (a b)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
942 "Return non-nil if A should be sorted before B.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
943 Predicate for sorting `doc-view-current-files'."
85801
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
944 (or (< (length a) (length b))
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
945 (and (= (length a) (length b))
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
946 (string< a b))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
947
91789
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
948 (defun doc-view-display (buffer &optional force)
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
949 "Start viewing the document in BUFFER.
87133
a99e0ba48aeb (doc-view-dvi->pdf-sentinel, doc-view-pdf/ps->png-sentinel)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87006
diff changeset
950 If FORCE is non-nil, start viewing even if the document does not
a99e0ba48aeb (doc-view-dvi->pdf-sentinel, doc-view-pdf/ps->png-sentinel)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87006
diff changeset
951 have the page we want to view."
91789
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
952 (with-current-buffer buffer
92220
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
953 (let ((prev-pages doc-view-current-files))
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
954 (setq doc-view-current-files
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
955 (sort (directory-files (doc-view-current-cache-dir) t
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
956 "page-[0-9]+\\.png" t)
9976b0faa96a (doc-view-conversion-buffer): Give it an internal name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92004
diff changeset
957 'doc-view-sort))
94443
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
958 (dolist (win (or (get-buffer-window-list buffer nil t)
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
959 (list (selected-window))))
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
960 (let* ((page (doc-view-current-page win))
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
961 (pagefile (expand-file-name (format "page-%d.png" page)
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
962 (doc-view-current-cache-dir))))
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
963 (when (or force
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
964 (and (not (member pagefile prev-pages))
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
965 (member pagefile doc-view-current-files)))
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
966 (with-selected-window win
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
967 (assert (eq (current-buffer) buffer))
f41f8f74c3cb (doc-view-new-window-function): Avoid using WINDOW
Chong Yidong <cyd@stupidchicken.com>
parents: 94236
diff changeset
968 (doc-view-goto-page page))))))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
969
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
970 (defun doc-view-buffer-message ()
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
971 ;; Only show this message initially, not when refreshing the buffer (in which
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
972 ;; case it's better to keep displaying the "stale" page while computing
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
973 ;; the fresh new ones).
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
974 (unless (overlay-get (doc-view-current-overlay) 'display)
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
975 (overlay-put (doc-view-current-overlay) 'display
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
976 (concat (propertize "Welcome to DocView!" 'face 'bold)
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
977 "\n"
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
978 "
85815
960b3c592913 (doc-view-conversion-refresh-interval)
Glenn Morris <rgm@gnu.org>
parents: 85805
diff changeset
979 If you see this buffer it means that the document you want to view is being
85801
9b97166d0c6c (doc-view-current-doc): Remove. Replace all uses by buffer-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85784
diff changeset
980 converted to PNG and the conversion of the first page hasn't finished yet or
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
981 `doc-view-conversion-refresh-interval' is set to nil.
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
982
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
983 For now these keys are useful:
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
984
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
985 `q' : Bury this buffer. Conversion will go on in background.
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
986 `k' : Kill the conversion process and this buffer.
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
987 `K' : Kill the conversion process.\n"))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
988
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95508
diff changeset
989 (declare-function tooltip-show "tooltip" (text &optional use-echo-area))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95508
diff changeset
990
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
991 (defun doc-view-show-tooltip ()
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
992 (interactive)
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
993 (tooltip-show (doc-view-current-info)))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
994
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
995 (defun doc-view-open-text ()
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
996 "Open a buffer with the current doc's contents as text."
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
997 (interactive)
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
998 (if doc-view-current-converter-processes
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
999 (message "DocView: please wait till conversion finished.")
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1000 (let ((txt (expand-file-name "doc.txt" (doc-view-current-cache-dir))))
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1001 (if (file-readable-p txt)
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1002 (find-file txt)
92763
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
1003 (doc-view-doc->txt txt 'doc-view-open-text)))))
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1004
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1005 ;;;;; Toggle between editing and viewing
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
1006
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1007
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
1008 (defun doc-view-toggle-display ()
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1009 "Toggle between editing a document as text or viewing it."
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
1010 (interactive)
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1011 (if (eq major-mode 'doc-view-mode)
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1012 ;; Switch to editing mode
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1013 (progn
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1014 (doc-view-kill-proc)
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1015 (setq buffer-read-only nil)
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1016 (remove-overlays (point-min) (point-max) 'doc-view t)
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1017 (set (make-local-variable 'image-mode-winprops-alist) t)
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1018 ;; Switch to the previously used major mode or fall back to fundamental
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1019 ;; mode.
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1020 (if doc-view-previous-major-mode
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1021 (funcall doc-view-previous-major-mode)
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1022 (fundamental-mode))
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1023 (doc-view-minor-mode 1))
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1024 ;; Switch to doc-view-mode
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1025 (when (and (buffer-modified-p)
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1026 (y-or-n-p "The buffer has been modified. Save the changes? "))
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1027 (save-buffer))
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1028 (doc-view-mode)))
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
1029
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1030 ;;;; Searching
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1031
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1032
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1033 (defun doc-view-search-internal (regexp file)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1034 "Return a list of FILE's pages that contain text matching REGEXP.
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1035 The value is an alist of the form (PAGE CONTEXTS) where PAGE is
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1036 the pagenumber and CONTEXTS are all lines of text containing a match."
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1037 (with-temp-buffer
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1038 (insert-file-contents file)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1039 (let ((page 1)
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1040 (lastpage 1)
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1041 matches)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1042 (while (re-search-forward (concat "\\(?:\\([ ]\\)\\|\\("
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1043 regexp "\\)\\)") nil t)
87556
39204305bf6f (doc-view-search-internal): Don't use `incf'.
Glenn Morris <rgm@gnu.org>
parents: 87522
diff changeset
1044 (when (match-string 1) (setq page (1+ page)))
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1045 (when (match-string 2)
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1046 (if (/= page lastpage)
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1047 (push (cons page
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1048 (list (buffer-substring
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1049 (line-beginning-position)
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1050 (line-end-position))))
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1051 matches)
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1052 (setq matches (cons
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1053 (append
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1054 (or
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1055 ;; This page already is a match.
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1056 (car matches)
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1057 ;; This is the first match on page.
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1058 (list page))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1059 (list (buffer-substring
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1060 (line-beginning-position)
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1061 (line-end-position))))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1062 (cdr matches))))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1063 (setq lastpage page)))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1064 (nreverse matches))))
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1065
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1066 (defun doc-view-search-no-of-matches (list)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1067 "Extract the number of matches from the search result LIST."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1068 (let ((no 0))
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1069 (dolist (p list)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1070 (setq no (+ no (1- (length p)))))
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1071 no))
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1072
86025
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1073 (defun doc-view-search-backward (new-query)
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1074 "Call `doc-view-search' for backward search.
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1075 If prefix NEW-QUERY is given, ask for a new regexp."
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1076 (interactive "P")
86156
d98fdcca854b * doc-view.el (doc-view-search-backward, doc-view-search): Fix
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86154
diff changeset
1077 (doc-view-search new-query t))
86025
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1078
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1079 (defun doc-view-search (new-query &optional backward)
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1080 "Jump to the next match or initiate a new search if NEW-QUERY is given.
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1081 If the current document hasn't been transformed to plain text
86025
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1082 till now do that first.
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1083 If BACKWARD is non-nil, jump to the previous match."
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1084 (interactive "P")
86156
d98fdcca854b * doc-view.el (doc-view-search-backward, doc-view-search): Fix
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86154
diff changeset
1085 (if (and (not new-query)
86025
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1086 doc-view-current-search-matches)
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1087 (if backward
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1088 (doc-view-search-previous-match 1)
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1089 (doc-view-search-next-match 1))
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1090 ;; New search, so forget the old results.
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1091 (setq doc-view-current-search-matches nil)
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1092 (let ((txt (expand-file-name "doc.txt"
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1093 (doc-view-current-cache-dir))))
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1094 (if (file-readable-p txt)
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1095 (progn
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1096 (setq doc-view-current-search-matches
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1097 (doc-view-search-internal
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1098 (read-from-minibuffer "Regexp: ")
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1099 txt))
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1100 (message "DocView: search yielded %d matches."
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1101 (doc-view-search-no-of-matches
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1102 doc-view-current-search-matches)))
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1103 ;; We must convert to TXT first!
93460
1f7e9d28dedf Compute displayed pages first (in PDF).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93050
diff changeset
1104 (if doc-view-current-converter-processes
86025
19784f7db0ef (doc-view-mode-map, doc-view-menu, doc-view-pdf->txt-sentinel):
Juri Linkov <juri@jurta.org>
parents: 85856
diff changeset
1105 (message "DocView: please wait till conversion finished.")
92763
5d8ccd2d65e2 Remove all cb-args, use closures instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92760
diff changeset
1106 (doc-view-doc->txt txt (lambda () (doc-view-search nil))))))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1107
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1108 (defun doc-view-search-next-match (arg)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1109 "Go to the ARGth next matching page."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1110 (interactive "p")
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1111 (let* ((next-pages (doc-view-remove-if
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
1112 (lambda (i) (<= (car i) (doc-view-current-page)))
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1113 doc-view-current-search-matches))
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1114 (page (car (nth (1- arg) next-pages))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1115 (if page
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1116 (doc-view-goto-page page)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1117 (when (and
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1118 doc-view-current-search-matches
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1119 (y-or-n-p "No more matches after current page. Wrap to first match? "))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1120 (doc-view-goto-page (caar doc-view-current-search-matches))))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1121
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1122 (defun doc-view-search-previous-match (arg)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1123 "Go to the ARGth previous matching page."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1124 (interactive "p")
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1125 (let* ((prev-pages (doc-view-remove-if
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
1126 (lambda (i) (>= (car i) (doc-view-current-page)))
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1127 doc-view-current-search-matches))
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1128 (page (car (nth (1- arg) (nreverse prev-pages)))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1129 (if page
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1130 (doc-view-goto-page page)
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1131 (when (and
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1132 doc-view-current-search-matches
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1133 (y-or-n-p "No more matches before current page. Wrap to last match? "))
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1134 (doc-view-goto-page (caar (last doc-view-current-search-matches)))))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1135
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
1136 ;;;; User interface commands and the mode
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
1137
107096
31db1aaeac2d * doc-view.el (doc-view-mode):
Juri Linkov <juri@jurta.org>
parents: 107087
diff changeset
1138 (put 'doc-view-mode 'mode-class 'special)
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1139
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1140 (defun doc-view-already-converted-p ()
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1141 "Return non-nil if the current doc was already converted."
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1142 (and (file-exists-p (doc-view-current-cache-dir))
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1143 ;; Check that the resolution info is there, otherwise it means
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1144 ;; the conversion is incomplete.
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1145 (file-readable-p (expand-file-name "resolution.el"
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1146 (doc-view-current-cache-dir)))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1147 (> (length (directory-files (doc-view-current-cache-dir)
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1148 nil "\\.png\\'"))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1149 0)))
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1150
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1151 (defun doc-view-initiate-display ()
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1152 ;; Switch to image display if possible
93050
831841710ce9 (doc-view-initiate-display): Use doc-view-doc-type
Tassilo Horn <tassilo@member.fsf.org>
parents: 93048
diff changeset
1153 (if (doc-view-mode-p doc-view-doc-type)
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1154 (progn
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1155 (doc-view-buffer-message)
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
1156 (setf (doc-view-current-page) (or (doc-view-current-page) 1))
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1157 (if (doc-view-already-converted-p)
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1158 (progn
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1159 (message "DocView: using cached files!")
102413
feece1082bed (doc-view-convert-current-doc): Save the current
Tassilo Horn <tassilo@member.fsf.org>
parents: 102358
diff changeset
1160 ;; Load the saved resolution
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1161 (let* ((res-file (expand-file-name "resolution.el"
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1162 (doc-view-current-cache-dir)))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1163 (res
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1164 (with-temp-buffer
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1165 (when (file-readable-p res-file)
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1166 (insert-file-contents res-file)
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1167 (read (current-buffer))))))
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1168 (when (numberp res)
102413
feece1082bed (doc-view-convert-current-doc): Save the current
Tassilo Horn <tassilo@member.fsf.org>
parents: 102358
diff changeset
1169 (set (make-local-variable 'doc-view-resolution) res)))
91789
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
1170 (doc-view-display (current-buffer) 'force))
85805
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1171 (doc-view-convert-current-doc))
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1172 (message
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1173 "%s"
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1174 (substitute-command-keys
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1175 (concat "Type \\[doc-view-toggle-display] to toggle between "
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1176 "editing or viewing the document."))))
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1177 (message
1d1d43e36948 Use expand-file-name rather than concat.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85801
diff changeset
1178 "%s"
103948
53e13148fb68 * doc-view.el (doc-view-initiate-display): Add yes-or-no-p if
Chong Yidong <cyd@stupidchicken.com>
parents: 102824
diff changeset
1179 (concat "No PNG support is available, or some conversion utility for "
53e13148fb68 * doc-view.el (doc-view-initiate-display): Add yes-or-no-p if
Chong Yidong <cyd@stupidchicken.com>
parents: 102824
diff changeset
1180 (file-name-extension doc-view-buffer-file-name)
53e13148fb68 * doc-view.el (doc-view-initiate-display): Add yes-or-no-p if
Chong Yidong <cyd@stupidchicken.com>
parents: 102824
diff changeset
1181 " files is missing."))
53e13148fb68 * doc-view.el (doc-view-initiate-display): Add yes-or-no-p if
Chong Yidong <cyd@stupidchicken.com>
parents: 102824
diff changeset
1182 (if (and (executable-find doc-view-pdftotext-program)
53e13148fb68 * doc-view.el (doc-view-initiate-display): Add yes-or-no-p if
Chong Yidong <cyd@stupidchicken.com>
parents: 102824
diff changeset
1183 (y-or-n-p
53e13148fb68 * doc-view.el (doc-view-initiate-display): Add yes-or-no-p if
Chong Yidong <cyd@stupidchicken.com>
parents: 102824
diff changeset
1184 "Unable to render file. View extracted text instead? "))
53e13148fb68 * doc-view.el (doc-view-initiate-display): Add yes-or-no-p if
Chong Yidong <cyd@stupidchicken.com>
parents: 102824
diff changeset
1185 (doc-view-open-text)
53e13148fb68 * doc-view.el (doc-view-initiate-display): Add yes-or-no-p if
Chong Yidong <cyd@stupidchicken.com>
parents: 102824
diff changeset
1186 (doc-view-toggle-display))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1187
92556
5944be8c8211 Change a return type, for greater extensibility. See
Karl Fogel <kfogel@red-bean.com>
parents: 92224
diff changeset
1188 (defvar bookmark-make-record-function)
87556
39204305bf6f (doc-view-search-internal): Don't use `incf'.
Glenn Morris <rgm@gnu.org>
parents: 87522
diff changeset
1189
91789
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
1190 (defun doc-view-clone-buffer-hook ()
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
1191 ;; FIXME: There are several potential problems linked with reconversion
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
1192 ;; and auto-revert when we have indirect buffers because they share their
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
1193 ;; /tmp cache directory. This sharing is good (you'd rather not reconvert
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
1194 ;; for each clone), but that means that clones need to collaborate a bit.
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
1195 ;; I guess it mostly means: detect when a reconversion process is already
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
1196 ;; running, and run the sentinel in all clones.
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1197 ;;
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
1198 ;; Maybe the clones should really have a separate /tmp directory
91789
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
1199 ;; so they could have a different resolution and you could use clones
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
1200 ;; for zooming.
92004
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
1201 (remove-overlays (point-min) (point-max) 'doc-view t)
db743b98a24b Allow different windows to show different pages.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91789
diff changeset
1202 (if (consp image-mode-winprops-alist) (setq image-mode-winprops-alist nil)))
91789
0048d198c131 (doc-view-display): Change file arg to buffer arg, so it
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91715
diff changeset
1203
92759
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
1204 (defun doc-view-intersection (l1 l2)
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
1205 (let ((l ()))
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
1206 (dolist (x l1) (if (memq x l2) (push x l)))
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
1207 l))
01d116e7fb72 (doc-view-new-window-function): Add assertion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92752
diff changeset
1208
85027
06c04cf43e80 (doc-view): Don't ignore pdf and dvi files when completing filename.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 84450
diff changeset
1209 ;;;###autoload
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1210 (defun doc-view-mode ()
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
1211 "Major mode in DocView buffers.
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1212
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1213 DocView Mode is an Emacs document viewer. It displays PDF, PS
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1214 and DVI files (as PNG images) in Emacs buffers.
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1215
85369
5b96a46cc08a * bindings.el (completion-ignored-extensions): Remove pdf and dvi
Reiner Steib <Reiner.Steib@gmx.de>
parents: 85367
diff changeset
1216 You can use \\<doc-view-mode-map>\\[doc-view-toggle-display] to
88105
44fd682c485a (doc-view-mode): Improve docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88063
diff changeset
1217 toggle between displaying the document or editing it as text.
44fd682c485a (doc-view-mode): Improve docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88063
diff changeset
1218 \\{doc-view-mode-map}"
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1219 (interactive)
87681
92ee34bb9001 2008-01-09 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87580
diff changeset
1220
102824
607b4f5da59c (doc-view-mode): Don't give up if the file doesn't exist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102545
diff changeset
1221 (if (= (point-min) (point-max))
101623
0974e3e4aca7 (doc-view-mode): Don't use string-match and file
Tassilo Horn <tassilo@member.fsf.org>
parents: 101575
diff changeset
1222 ;; The doc is empty or doesn't exist at all, so fallback to
102824
607b4f5da59c (doc-view-mode): Don't give up if the file doesn't exist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102545
diff changeset
1223 ;; another mode. We used to also check file-exists-p, but this
607b4f5da59c (doc-view-mode): Don't give up if the file doesn't exist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 102545
diff changeset
1224 ;; returns nil for tar members.
101623
0974e3e4aca7 (doc-view-mode): Don't use string-match and file
Tassilo Horn <tassilo@member.fsf.org>
parents: 101575
diff changeset
1225 (let ((auto-mode-alist (remq (rassq 'doc-view-mode auto-mode-alist)
0974e3e4aca7 (doc-view-mode): Don't use string-match and file
Tassilo Horn <tassilo@member.fsf.org>
parents: 101575
diff changeset
1226 auto-mode-alist)))
0974e3e4aca7 (doc-view-mode): Don't use string-match and file
Tassilo Horn <tassilo@member.fsf.org>
parents: 101575
diff changeset
1227 (normal-mode))
92879
4486b0175a46 (doc-view-doc->txt, doc-view-convert-current-doc):
Tassilo Horn <tassilo@member.fsf.org>
parents: 92763
diff changeset
1228
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1229 (let* ((prev-major-mode (if (eq major-mode 'doc-view-mode)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1230 doc-view-previous-major-mode
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1231 major-mode)))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1232 (kill-all-local-variables)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1233 (set (make-local-variable 'doc-view-previous-major-mode) prev-major-mode))
101909
b62aecf6b1db (doc-view-scroll-up-or-next-page)
Tassilo Horn <tassilo@member.fsf.org>
parents: 101623
diff changeset
1234
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1235 ;; Figure out the document type.
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1236 (let ((name-types
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1237 (when buffer-file-name
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1238 (cdr (assoc (file-name-extension buffer-file-name)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1239 '(("dvi" dvi)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1240 ("pdf" pdf)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1241 ("epdf" pdf)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1242 ("ps" ps)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1243 ("eps" ps))))))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1244 (content-types
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1245 (save-excursion
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1246 (goto-char (point-min))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1247 (cond
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1248 ((looking-at "%!") '(ps))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1249 ((looking-at "%PDF") '(pdf))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1250 ((looking-at "\367\002") '(dvi))))))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1251 (set (make-local-variable 'doc-view-doc-type)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1252 (car (or (doc-view-intersection name-types content-types)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1253 (when (and name-types content-types)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1254 (error "Conflicting types: name says %s but content says %s"
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1255 name-types content-types))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1256 name-types content-types
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1257 (error "Cannot determine the document type")))))
101909
b62aecf6b1db (doc-view-scroll-up-or-next-page)
Tassilo Horn <tassilo@member.fsf.org>
parents: 101623
diff changeset
1258
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1259 (doc-view-make-safe-dir doc-view-cache-directory)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1260 ;; Handle compressed files, remote files, files inside archives
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1261 (set (make-local-variable 'doc-view-buffer-file-name)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1262 (cond
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1263 (jka-compr-really-do-compress
106467
0314d1c68b88 Make it work for non-file buffers (bug#5102).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106327
diff changeset
1264 ;; FIXME: there's a risk of name conflicts here.
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1265 (expand-file-name
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1266 (file-name-nondirectory
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1267 (file-name-sans-extension buffer-file-name))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1268 doc-view-cache-directory))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1269 ;; Is the file readable by local processes?
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1270 ;; We used to use `file-remote-p' but it's unclear what it's
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1271 ;; supposed to return nil for things like local files accessed via
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1272 ;; `su' or via file://...
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1273 ((let ((file-name-handler-alist nil))
106467
0314d1c68b88 Make it work for non-file buffers (bug#5102).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106327
diff changeset
1274 (not (and buffer-file-name (file-readable-p buffer-file-name))))
0314d1c68b88 Make it work for non-file buffers (bug#5102).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106327
diff changeset
1275 ;; FIXME: there's a risk of name conflicts here.
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1276 (expand-file-name
106467
0314d1c68b88 Make it work for non-file buffers (bug#5102).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106327
diff changeset
1277 (if buffer-file-name
0314d1c68b88 Make it work for non-file buffers (bug#5102).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106327
diff changeset
1278 (file-name-nondirectory buffer-file-name)
0314d1c68b88 Make it work for non-file buffers (bug#5102).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106327
diff changeset
1279 (buffer-name))
0314d1c68b88 Make it work for non-file buffers (bug#5102).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106327
diff changeset
1280 doc-view-cache-directory))
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1281 (t buffer-file-name)))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1282 (when (not (string= doc-view-buffer-file-name buffer-file-name))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1283 (write-region nil nil doc-view-buffer-file-name))
101909
b62aecf6b1db (doc-view-scroll-up-or-next-page)
Tassilo Horn <tassilo@member.fsf.org>
parents: 101623
diff changeset
1284
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1285 (add-hook 'change-major-mode-hook
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1286 (lambda ()
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1287 (doc-view-kill-proc)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1288 (remove-overlays (point-min) (point-max) 'doc-view t))
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1289 nil t)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1290 (add-hook 'clone-indirect-buffer-hook 'doc-view-clone-buffer-hook nil t)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1291 (add-hook 'kill-buffer-hook 'doc-view-kill-proc nil t)
101909
b62aecf6b1db (doc-view-scroll-up-or-next-page)
Tassilo Horn <tassilo@member.fsf.org>
parents: 101623
diff changeset
1292
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1293 (remove-overlays (point-min) (point-max) 'doc-view t) ;Just in case.
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1294 ;; Keep track of display info ([vh]scroll, page number, overlay,
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1295 ;; ...) for each window in which this document is shown.
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1296 (add-hook 'image-mode-new-window-functions
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1297 'doc-view-new-window-function nil t)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1298 (image-mode-setup-winprops)
101909
b62aecf6b1db (doc-view-scroll-up-or-next-page)
Tassilo Horn <tassilo@member.fsf.org>
parents: 101623
diff changeset
1299
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1300 (set (make-local-variable 'mode-line-position)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1301 '(" P" (:eval (number-to-string (doc-view-current-page)))
107087
392cb4c24760 Fix up various corner case problems.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107069
diff changeset
1302 "/" (:eval (number-to-string (doc-view-last-page-number)))))
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1303 ;; Don't scroll unless the user specifically asked for it.
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1304 (set (make-local-variable 'auto-hscroll-mode) nil)
106241
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
1305 (set (make-local-variable 'mwheel-scroll-up-function)
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
1306 'doc-view-scroll-up-or-next-page)
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
1307 (set (make-local-variable 'mwheel-scroll-down-function)
7ce04dfc904d Mouse-wheel scrolling for DocView Continuous mode. (Bug#4896)
Juri Linkov <juri@jurta.org>
parents: 106214
diff changeset
1308 'doc-view-scroll-down-or-previous-page)
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1309 (set (make-local-variable 'cursor-type) nil)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1310 (use-local-map doc-view-mode-map)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1311 (set (make-local-variable 'after-revert-hook) 'doc-view-reconvert-doc)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1312 (set (make-local-variable 'bookmark-make-record-function)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1313 'doc-view-bookmark-make-record)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1314 (setq mode-name "DocView"
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1315 buffer-read-only t
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1316 major-mode 'doc-view-mode)
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1317 (doc-view-initiate-display)
106214
8653ee602137 * doc-view.el (doc-view-mode): Switch off view-mode explicitly,
Tassilo Horn <tassilo@member.fsf.org>
parents: 106207
diff changeset
1318 ;; Switch off view-mode explicitly, because doc-view-mode is the
8653ee602137 * doc-view.el (doc-view-mode): Switch off view-mode explicitly,
Tassilo Horn <tassilo@member.fsf.org>
parents: 106207
diff changeset
1319 ;; canonical view mode for PDF/PS/DVI files. This could be
8653ee602137 * doc-view.el (doc-view-mode): Switch off view-mode explicitly,
Tassilo Horn <tassilo@member.fsf.org>
parents: 106207
diff changeset
1320 ;; switched on automatically depending on the value of
8653ee602137 * doc-view.el (doc-view-mode): Switch off view-mode explicitly,
Tassilo Horn <tassilo@member.fsf.org>
parents: 106207
diff changeset
1321 ;; `view-read-only'.
106242
fb2730a2950b (doc-view-mode): Set buffer-local `view-read-only' to nil
Juri Linkov <juri@jurta.org>
parents: 106241
diff changeset
1322 (set (make-local-variable 'view-read-only) nil)
101573
6c0c4dcde904 (doc-view-mode): Enhance docstring and fallback to
Tassilo Horn <tassilo@member.fsf.org>
parents: 100908
diff changeset
1323 (run-mode-hooks 'doc-view-mode-hook)))
85784
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1324
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1325 ;;;###autoload
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1326 (define-minor-mode doc-view-minor-mode
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1327 "Toggle Doc view minor mode.
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1328 With arg, turn Doc view minor mode on if arg is positive, off otherwise.
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1329 See the command `doc-view-mode' for more information on this mode."
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1330 nil " DocView" doc-view-minor-mode-map
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1331 :group 'doc-view
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1332 (when doc-view-minor-mode
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1333 (add-hook 'change-major-mode-hook (lambda () (doc-view-minor-mode -1)) nil t)
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1334 (message
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1335 "%s"
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1336 (substitute-command-keys
b0dc7772c4dc Tassilo Horn <tassilo at member.fsf.org>
Glenn Morris <rgm@gnu.org>
parents: 85444
diff changeset
1337 "Type \\[doc-view-toggle-display] to toggle between editing or viewing the document."))))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1338
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1339 (defun doc-view-clear-cache ()
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1340 "Delete the whole cache (`doc-view-cache-directory')."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1341 (interactive)
92752
7f212bec15c4 (doc-view-doc->txt, doc-view-open-text)
Tassilo Horn <tassilo@member.fsf.org>
parents: 92691
diff changeset
1342 (dired-delete-file doc-view-cache-directory 'always))
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1343
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1344 (defun doc-view-dired-cache ()
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1345 "Open `dired' in `doc-view-cache-directory'."
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1346 (interactive)
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1347 (dired doc-view-cache-directory))
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1348
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1349
87411
9ac481bc897b 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87133
diff changeset
1350 ;;;; Bookmark integration
9ac481bc897b 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87133
diff changeset
1351
109395
fa4400531412 Preparation for setting bookmarks in Gnus article buffers (Bug#5975).
Karl Fogel <kfogel@red-bean.com>
parents: 107167
diff changeset
1352 (declare-function bookmark-make-record-default
fa4400531412 Preparation for setting bookmarks in Gnus article buffers (Bug#5975).
Karl Fogel <kfogel@red-bean.com>
parents: 107167
diff changeset
1353 "bookmark" (&optional no-file no-context posn))
92691
0574109ed8bc (bookmark-buffer-file-name, bookmark-prop-get): Declare.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92674
diff changeset
1354 (declare-function bookmark-prop-get "bookmark" (bookmark prop))
96280
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
1355 (declare-function bookmark-default-handler "bookmark" (bmk))
92691
0574109ed8bc (bookmark-buffer-file-name, bookmark-prop-get): Declare.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92674
diff changeset
1356
92674
ac3c6c3e119c * bookmark.el (bookmark-make): Don't pass the `annotation' to the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92563
diff changeset
1357 (defun doc-view-bookmark-make-record ()
96280
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
1358 (nconc (bookmark-make-record-default)
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
1359 `((page . ,(doc-view-current-page))
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
1360 (handler . doc-view-bookmark-jump))))
87411
9ac481bc897b 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87133
diff changeset
1361
87556
39204305bf6f (doc-view-search-internal): Don't use `incf'.
Glenn Morris <rgm@gnu.org>
parents: 87522
diff changeset
1362
87411
9ac481bc897b 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87133
diff changeset
1363 ;;;###autoload
9ac481bc897b 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87133
diff changeset
1364 (defun doc-view-bookmark-jump (bmk)
87521
0140d3ebb262 Change a return type, for greater extensibility. See
Karl Fogel <kfogel@red-bean.com>
parents: 87412
diff changeset
1365 ;; This implements the `handler' function interface for record type
92556
5944be8c8211 Change a return type, for greater extensibility. See
Karl Fogel <kfogel@red-bean.com>
parents: 92224
diff changeset
1366 ;; returned by `doc-view-bookmark-make-record', which see.
96280
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
1367 (prog1 (bookmark-default-handler bmk)
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
1368 (let ((page (bookmark-prop-get bmk 'page)))
87411
9ac481bc897b 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87133
diff changeset
1369 (when (not (eq major-mode 'doc-view-mode))
96280
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
1370 (doc-view-toggle-display))
92691
0574109ed8bc (bookmark-buffer-file-name, bookmark-prop-get): Declare.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92674
diff changeset
1371 (with-selected-window
0574109ed8bc (bookmark-buffer-file-name, bookmark-prop-get): Declare.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92674
diff changeset
1372 (or (get-buffer-window (current-buffer) 0)
0574109ed8bc (bookmark-buffer-file-name, bookmark-prop-get): Declare.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92674
diff changeset
1373 (selected-window))
96280
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
1374 (doc-view-goto-page page)))))
87411
9ac481bc897b 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87133
diff changeset
1375
87556
39204305bf6f (doc-view-search-internal): Don't use `incf'.
Glenn Morris <rgm@gnu.org>
parents: 87522
diff changeset
1376
39204305bf6f (doc-view-search-internal): Don't use `incf'.
Glenn Morris <rgm@gnu.org>
parents: 87522
diff changeset
1377 (provide 'doc-view)
39204305bf6f (doc-view-search-internal): Don't use `incf'.
Glenn Morris <rgm@gnu.org>
parents: 87522
diff changeset
1378
39204305bf6f (doc-view-search-internal): Don't use `incf'.
Glenn Morris <rgm@gnu.org>
parents: 87522
diff changeset
1379 ;; Local Variables:
39204305bf6f (doc-view-search-internal): Don't use `incf'.
Glenn Morris <rgm@gnu.org>
parents: 87522
diff changeset
1380 ;; mode: outline-minor
39204305bf6f (doc-view-search-internal): Don't use `incf'.
Glenn Morris <rgm@gnu.org>
parents: 87522
diff changeset
1381 ;; End:
39204305bf6f (doc-view-search-internal): Don't use `incf'.
Glenn Morris <rgm@gnu.org>
parents: 87522
diff changeset
1382
87522
818b4291c99a Add arch tagline
Miles Bader <miles@gnu.org>
parents: 87521
diff changeset
1383 ;; arch-tag: 5d6e5c5e-095f-489e-b4e4-1ca90a7d79be
84422
67c730c1c685 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
1384 ;;; doc-view.el ends here