annotate lisp/gs.el @ 97528:184bb2071e3f

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