annotate lisp/gs.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 1d1d5d9bd884
children 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
101065
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1 ;;; gs.el --- interface to Ghostscript
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2
105648
c97e346c34f6 (gs-load-image): Replace obsolete forms of sit-for, sleep-for.
Glenn Morris <rgm@gnu.org>
parents: 101065
diff changeset
3 ;; Copyright (C) 1998, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105648
diff changeset
4 ;; 2009, 2010 Free Software Foundation, Inc.
101065
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
5
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
6 ;; Maintainer: FSF
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
7 ;; Keywords: internal
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
8
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
10
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
14 ;; (at your option) any later version.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
15
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
19 ;; GNU General Public License for more details.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
20
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
23
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
24 ;;; Commentary:
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
25
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
26 ;; This code is experimental. Don't use it.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
27
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
28 ;;; Code:
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
29
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
30 (defvar gs-program "gs"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
31 "The name of the Ghostscript interpreter.")
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
32
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
33
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
34 (defvar gs-device "x11"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
35 "The Ghostscript device to use to produce images.")
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
36
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
37
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
38 (defvar gs-options
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
39 '("-q"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
40 ;"-dNOPAUSE"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
41 "-dSAFER"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
42 "-dBATCH"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
43 "-sDEVICE=<device>"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
44 "<file>")
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
45 "List of command line arguments to pass to Ghostscript.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
46 Arguments may contain place-holders `<file>' for the name of the
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
47 input file, and `<device>' for the device to use.")
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
48 (put 'gs-options 'risky-local-variable t)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
49
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
50 (defun gs-options (device file)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
51 "Return a list of command line options with place-holders replaced.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
52 DEVICE is the value to substitute for the place-holder `<device>',
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
53 FILE is the value to substitute for the place-holder `<file>'."
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
54 (mapcar #'(lambda (option)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
55 (setq option (replace-regexp-in-string "<device>" device option)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
56 option (replace-regexp-in-string "<file>" file option)))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
57 gs-options))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
58
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
59 ;; The GHOSTVIEW property (taken from gv 3.5.8).
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
60 ;;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
61 ;; Type:
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
62 ;;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
63 ;; STRING
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
64 ;;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
65 ;; Parameters:
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
66 ;;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
67 ;; BPIXMAP ORIENT LLX LLY URX URY XDPI YDPI [LEFT BOTTOM TOP RIGHT]
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
68 ;;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
69 ;; Scanf format: "%d %d %d %d %d %d %f %f %d %d %d %d"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
70 ;;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
71 ;; Explanation of parameters:
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
72 ;;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
73 ;; BPIXMAP: pixmap id of the backing pixmap for the window. If no
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
74 ;; pixmap is to be used, this parameter should be zero. This
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
75 ;; parameter must be zero when drawing on a pixmap.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
76 ;;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
77 ;; ORIENT: orientation of the page. The number represents clockwise
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
78 ;; rotation of the paper in degrees. Permitted values are 0, 90, 180,
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
79 ;; 270.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
80 ;;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
81 ;; LLX, LLY, URX, URY: Bounding box of the drawable. The bounding box
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
82 ;; is specified in PostScript points in default user coordinates.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
83 ;;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
84 ;; XDPI, YDPI: Resolution of window. (This can be derived from the
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
85 ;; other parameters, but not without roundoff error. These values are
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
86 ;; included to avoid this error.)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
87 ;;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
88 ;; LEFT, BOTTOM, TOP, RIGHT: (optional) Margins around the window.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
89 ;; The margins extend the imageable area beyond the boundaries of the
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
90 ;; window. This is primarily used for popup zoom windows. I have
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
91 ;; encountered several instances of PostScript programs that position
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
92 ;; themselves with respect to the imageable area. The margins are
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
93 ;; specified in PostScript points. If omitted, the margins are
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
94 ;; assumed to be 0.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
95
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
96 (declare-function x-display-mm-width "xfns.c" (&optional terminal))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
97 (declare-function x-display-pixel-width "xfns.c" (&optional terminal))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
98
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
99 (defun gs-width-in-pt (frame pixel-width)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
100 "Return, on FRAME, pixel width PIXEL-WIDTH tranlated to pt."
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
101 (let ((mm (* (float pixel-width)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
102 (/ (float (x-display-mm-width frame))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
103 (float (x-display-pixel-width frame))))))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
104 (/ (* 25.4 mm) 72.0)))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
105
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
106 (declare-function x-display-mm-height "xfns.c" (&optional terminal))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
107 (declare-function x-display-pixel-height "xfns.c" (&optional terminal))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
108
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
109 (defun gs-height-in-pt (frame pixel-height)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
110 "Return, on FRAME, pixel height PIXEL-HEIGHT tranlated to pt."
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
111 (let ((mm (* (float pixel-height)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
112 (/ (float (x-display-mm-height frame))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
113 (float (x-display-pixel-height frame))))))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
114 (/ (* 25.4 mm) 72.0)))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
115
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
116 (declare-function x-change-window-property "xfns.c"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
117 (prop value &optional frame type format outer-p))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
118
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
119 (defun gs-set-ghostview-window-prop (frame spec img-width img-height)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
120 "Set the `GHOSTVIEW' window property of FRAME.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
121 SPEC is a GS image specification. IMG-WIDTH is the width of the
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
122 requested image, and IMG-HEIGHT is the height of the requested
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
123 image in pixels."
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
124 (let* ((box (plist-get (cdr spec) :bounding-box))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
125 (llx (elt box 0))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
126 (lly (elt box 1))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
127 (urx (elt box 2))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
128 (ury (elt box 3))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
129 (rotation (or (plist-get (cdr spec) :rotate) 0))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
130 ;; The pixel width IMG-WIDTH of the pixmap gives the
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
131 ;; dots, URX - LLX give the inch.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
132 (in-width (/ (- urx llx) 72.0))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
133 (in-height (/ (- ury lly) 72.0))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
134 (xdpi (/ img-width in-width))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
135 (ydpi (/ img-height in-height)))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
136 (x-change-window-property "GHOSTVIEW"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
137 (format "0 %d %d %d %d %d %g %g"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
138 rotation llx lly urx ury xdpi ydpi)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
139 frame)))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
140
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
141 (declare-function x-display-grayscale-p "xfns.c" (&optional terminal))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
142
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
143 (defun gs-set-ghostview-colors-window-prop (frame pixel-colors)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
144 "Set the `GHOSTVIEW_COLORS' environment variable depending on FRAME."
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
145 (let ((mode (cond ((x-display-color-p frame) "Color")
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
146 ((x-display-grayscale-p frame) "Grayscale")
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
147 (t "Monochrome"))))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
148 (x-change-window-property "GHOSTVIEW_COLORS"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
149 (format "%s %s" mode pixel-colors)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
150 frame)))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
151
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
152 (declare-function x-window-property "xfns.c"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
153 (prop &optional frame type source delete-p vector-ret-p))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
154
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
155 ;;;###autoload
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
156 (defun gs-load-image (frame spec img-width img-height window-and-pixmap-id
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
157 pixel-colors)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
158 "Load a PS image for display on FRAME.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
159 SPEC is an image specification, IMG-HEIGHT and IMG-WIDTH are width
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
160 and height of the image in pixels. WINDOW-AND-PIXMAP-ID is a string of
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
161 the form \"WINDOW-ID PIXMAP-ID\". Value is non-nil if successful."
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
162 (unwind-protect
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
163 (let ((file (plist-get (cdr spec) :file))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
164 gs
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
165 (timeout 40))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
166 ;; Wait while property gets freed from a previous ghostscript process
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
167 ;; sit-for returns nil as soon as input starts being
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
168 ;; available, so if we want to give GhostScript a reasonable
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
169 ;; chance of starting up, we better use sleep-for. We let
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
170 ;; sleep-for wait only half the time because if input is
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
171 ;; available, it is more likely that we don't care that much
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
172 ;; about garbled redisplay and are in a hurry.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
173 (while (and
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
174 ;; Wait while the property is not yet available
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
175 (not (zerop (length (x-window-property "GHOSTVIEW"
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
176 frame))))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
177 ;; The following was an alternative condition: wait
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
178 ;; while there is still a process running. The idea
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
179 ;; was to avoid contention between processes. Turned
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
180 ;; out even more sluggish.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
181 ;; (get-buffer-process "*GS*")
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
182 (not (zerop timeout)))
105648
c97e346c34f6 (gs-load-image): Replace obsolete forms of sit-for, sleep-for.
Glenn Morris <rgm@gnu.org>
parents: 101065
diff changeset
183 (unless (sit-for 0.1 t)
c97e346c34f6 (gs-load-image): Replace obsolete forms of sit-for, sleep-for.
Glenn Morris <rgm@gnu.org>
parents: 101065
diff changeset
184 (sleep-for 0.05))
101065
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
185 (setq timeout (1- timeout)))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
186
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
187 ;; No use waiting longer. We might want to try killing off
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
188 ;; stuck processes, but there is no point in doing so: either
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
189 ;; they are stuck for good, in which case the user would
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
190 ;; probably be responsible for that, and killing them off will
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
191 ;; make debugging harder, or they are not. In that case, they
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
192 ;; will cause incomplete displays. But the same will happen
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
193 ;; if they are killed, anyway. The whole is rather
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
194 ;; disconcerting, and fast scrolling through a dozen images
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
195 ;; will make Emacs freeze for a while. The alternatives are a)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
196 ;; proper implementation not waiting at all but creating
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
197 ;; appropriate queues, or b) permanently bad display due to
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
198 ;; bad cached images. So remember that this
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
199 ;; is just a hack and if people don't like the behavior, they
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
200 ;; will most likely like the easy alternatives even less.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
201 ;; And at least the image cache will make the delay apparent
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
202 ;; just once.
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
203 (gs-set-ghostview-window-prop frame spec img-width img-height)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
204 (gs-set-ghostview-colors-window-prop frame pixel-colors)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
205 (setenv "GHOSTVIEW" window-and-pixmap-id)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
206 (setq gs (apply 'start-process "gs" "*GS*" gs-program
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
207 (gs-options gs-device file)))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
208 (set-process-query-on-exit-flag gs nil)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
209 gs)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
210 nil))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
211
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
212
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
213 ;(defun gs-put-tiger ()
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
214 ; (let* ((ps-file "/usr/local/share/ghostscript/5.10/examples/tiger.ps")
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
215 ; (spec `(image :type postscript
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
216 ; :pt-width 200 :pt-height 200
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
217 ; :bounding-box (22 171 567 738)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
218 ; :file ,ps-file)))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
219 ; (put-text-property 1 2 'display spec)))
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
220 ;
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
221
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
222 (provide 'gs)
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
223
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
224 ;; arch-tag: 06ab51b8-4932-4cfe-9f60-b924a8edb3f0
d500b86d2189 * gs.el: Undo removal.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
225 ;;; gs.el ends here