annotate lisp/device.el @ 1559:9bf5135fc04f

[xemacs-hg @ 2003-07-04 07:16:25 by michaels] 2003-07-02 Mike Sperber <mike@xemacs.org> * toolbar.c (update_frame_toolbars_geometry): Update the frame size when correct information to compute it is actually available. Moreover, do it right via the frame method if it's available.
author michaels
date Fri, 04 Jul 2003 07:16:26 +0000
parents 0784d089fdc9
children da8cdcec6dff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 ;;; device.el --- miscellaneous device functions not written in C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ;; Copyright (C) 1994-5, 1997 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 ;; Copyright (C) 1995, 1996 Ben Wing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 ;; Maintainer: XEmacs Development Team
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ;; Keywords: internal, dumped
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 ;; This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 ;; XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ;; under the terms of the GNU General Public License as published by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ;; any later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 ;; XEmacs is distributed in the hope that it will be useful, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 ;; General Public License for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 ;; along with XEmacs; see the file COPYING. If not, write to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 ;; Free Software Foundation, 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 ;; Boston, MA 02111-1307, USA.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 ;;; Synched up with: Not in FSF.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 ;;; Commentary:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 ;; This file is dumped with XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
34 ;;; Initialization
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
35
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
36 ; Specifier tag 'printer which matches printers
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
37 (define-specifier-tag 'printer (function device-printer-p))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
38
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
39 ; Specifier tag 'display which matches displays
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
40 (define-specifier-tag 'display (function
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
41 (lambda (device)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
42 (not (device-printer-p device)))))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
43
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
44 ;;; Functions
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
45
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 (defun device-list ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 "Return a list of all devices."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 (apply 'nconc (mapcar 'console-device-list (console-list))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 (defun device-type (&optional device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 "Return the type of the specified device (e.g. `x' or `tty').
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 This is equivalent to the type of the device's console.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 Value is `tty' for a tty device (a character-only terminal),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 `x' for a device that is a screen on an X display,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 440
diff changeset
55 `gtk' for a device that is a GTK connection.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 `ns' for a device that is a NeXTstep connection (not yet implemented),
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
57 `mswindows' for a device that is a MS Windows workstation,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
58 `msprinter' for a device that is a MS Windows printer connection,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 `stream' for a stream device (which acts like a stdio stream), and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 `dead' for a deleted device."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 (or device (setq device (selected-device)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 (if (not (device-live-p device)) 'dead
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 (console-type (device-console device))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 (defun make-tty-device (&optional tty terminal-type controlling-process)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 "Create a new device on TTY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 TTY should be the name of a tty device file (e.g. \"/dev/ttyp3\" under
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 SunOS et al.), as returned by the `tty' command. A value of nil means
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 use the stdin and stdout as passed to XEmacs from the shell.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 If TERMINAL-TYPE is non-nil, it should be a string specifying the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 type of the terminal attached to the specified tty. If it is nil,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 the terminal type will be inferred from the TERM environment variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 If CONTROLLING-PROCESS is non-nil, it should be an integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 specifying the process id of the process in control of the specified tty. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 it is nil, it is assumes to be the value returned by emacs-pid."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 (make-device 'tty tty (list 'terminal-type terminal-type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 'controlling-process controlling-process)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 (defun device-pixel-width (&optional device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 "Return the width in pixels of DEVICE, or nil if unknown."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 (let ((ds (device-system-metric device 'size-device)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 (and ds (car ds))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 (defun device-pixel-height (&optional device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 "Return the height in pixels of DEVICE, or nil if unknown."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 (let ((ds (device-system-metric device 'size-device)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 (and ds (cdr ds))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 (defun device-mm-width (&optional device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 "Return the width in millimeters of DEVICE, or nil if unknown."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 (let ((ds (device-system-metric device 'size-device-mm)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 (and ds (car ds))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 (defun device-mm-height (&optional device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 "Return the height in millimeters of DEVICE, or nil if unknown."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 (let ((ds (device-system-metric device 'size-device-mm)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 (and ds (cdr ds))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 (defun device-bitplanes (&optional device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 "Return the number of bitplanes of DEVICE, or nil if unknown."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 (device-system-metric device 'num-bit-planes))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 (defun device-color-cells (&optional device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 "Return the number of color cells of DEVICE, or nil if unknown."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 (device-system-metric device 'num-color-cells))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 440
diff changeset
107 (defun make-gtk-device ()
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 440
diff changeset
108 "Create a new GTK device."
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 440
diff changeset
109 (make-device 'gtk nil))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 440
diff changeset
110
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 (defun make-x-device (&optional display)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 "Create a new device connected to DISPLAY."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 (make-device 'x display))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 (defun make-mswindows-device ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 "Create a new mswindows device."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 (make-device 'mswindows nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 (defun device-on-window-system-p (&optional device)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 "Return non-nil if DEVICE is on a window system.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 This generally means that there is support for the mouse, the menubar,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 the toolbar, glyphs, etc."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 (or device (setq device (selected-device)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 (console-on-window-system-p (device-console device)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 (defun call-device-method (name device &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 "Call a DEVICE-specific function with the generic name NAME.
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
128 If DEVICE is not provided then the selected device is used."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 (or device (setq device (selected-device)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 (or (symbolp name) (error "function name must be a symbol"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 (let ((devmeth (intern (concat (symbol-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 (device-type device)) "-" (symbol-name name)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 (if (functionp devmeth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 (if args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 (apply devmeth args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 (funcall devmeth))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 (defmacro define-device-method (name &optional docstring)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 "Define NAME to be a device method."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 `(defun ,name (&rest arglist) ,docstring
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 (apply 'call-device-method (quote ,name) nil arglist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 (defmacro define-device-method* (name &optional docstring)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 "Define NAME to be a device method."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 `(defun* ,name (&rest arglist) ,docstring
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 (apply 'call-device-method (quote ,name) nil arglist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 (defalias 'valid-device-type-p 'valid-console-type-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 (defalias 'device-type-list 'console-type-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 (defalias 'device-pixel-depth 'device-bitplanes)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 ;;; device.el ends here