Mercurial > hg > xemacs-beta
diff lisp/device.el @ 398:74fd4e045ea6 r21-2-29
Import from CVS: tag r21-2-29
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:13:30 +0200 |
parents | 558f606b08ae |
children | 697ef44129c6 |
line wrap: on
line diff
--- a/lisp/device.el Mon Aug 13 11:12:06 2007 +0200 +++ b/lisp/device.el Mon Aug 13 11:13:30 2007 +0200 @@ -31,6 +31,18 @@ ;;; Code: +;;; Initialization + +; Specifier tag 'printer which matches printers +(define-specifier-tag 'printer (function device-printer-p)) + +; Specifier tag 'display which matches displays +(define-specifier-tag 'display (function + (lambda (device) + (not (device-printer-p device))))) + +;;; Functions + (defun device-list () "Return a list of all devices." (apply 'nconc (mapcar 'console-device-list (console-list)))) @@ -41,8 +53,8 @@ Value is `tty' for a tty device (a character-only terminal), `x' for a device that is a screen on an X display, `ns' for a device that is a NeXTstep connection (not yet implemented), -`mswindows' for a device that is a Windows or Windows NT connection, -`pc' for a device that is a direct-write MS-DOS screen (not yet implemented), +`mswindows' for a device that is a MS Windows workstation, +`msprinter' for a device that is a MS Windows printer connection, `stream' for a stream device (which acts like a stdio stream), and `dead' for a deleted device." (or device (setq device (selected-device))) @@ -106,6 +118,29 @@ (or device (setq device (selected-device))) (console-on-window-system-p (device-console device))) +(defun call-device-method (name device &rest args) + "Call a DEVICE-specific function with the generic name NAME. +If DEVICE is not provided then the selected device is used." + (or device (setq device (selected-device))) + (or (symbolp name) (error "function name must be a symbol")) + (let ((devmeth (intern (concat (symbol-name + (device-type device)) "-" (symbol-name name))))) + (if (functionp devmeth) + (if args + (apply devmeth args) + (funcall devmeth)) + nil))) + +(defmacro define-device-method (name &optional docstring) + "Define NAME to be a device method." + `(defun ,name (&rest arglist) ,docstring + (apply 'call-device-method (quote ,name) nil arglist))) + +(defmacro define-device-method* (name &optional docstring) + "Define NAME to be a device method." + `(defun* ,name (&rest arglist) ,docstring + (apply 'call-device-method (quote ,name) nil arglist))) + (defalias 'valid-device-type-p 'valid-console-type-p) (defalias 'device-type-list 'console-type-list) (defalias 'device-pixel-depth 'device-bitplanes)