comparison lisp/printer.el @ 506:39ccc7dd8077

[xemacs-hg @ 2001-05-05 08:39:59 by ben] Add Page Setup for Windows, take out Pretty Print. Implement Page Setup. Handle errors properly. Change top/bottom margin defaults to 0.5 inches.
author ben
date Sat, 05 May 2001 08:40:06 +0000
parents 98fb34b6fbe9
children 5bdbc721d46a
comparison
equal deleted inserted replaced
505:6495d35ba9df 506:39ccc7dd8077
51 ;; pretty-print package on Unix, built-in msprinter support on 51 ;; pretty-print package on Unix, built-in msprinter support on
52 ;; Windows), where the workings of a particular implementation is 52 ;; Windows), where the workings of a particular implementation is
53 ;; hidden from the user and there is a consistent set of options to 53 ;; hidden from the user and there is a consistent set of options to
54 ;; control how to print, which works across all implementations. 54 ;; control how to print, which works across all implementations.
55 ;; 55 ;;
56 ;; The code here is just a start and needs a huge amount of work. Probably 56 ;; The code here currently only really supports Windows.
57 ;; the interfaces below will change and the functions renamed.
58 57
59 (defgroup printing nil 58 (defgroup printing nil
60 "Generic printing support." 59 "Generic printing support."
61 :group 'wp) 60 :group 'wp)
62 61
67 printers." 66 printers."
68 :type 'string 67 :type 'string
69 :group 'printing) 68 :group 'printing)
70 69
71 (defstruct Print-context pageno window start-time printer-name) 70 (defstruct Print-context pageno window start-time printer-name)
71
72 (defvar printer-current-device nil)
73
74 (defun Printer-get-device ()
75 (or printer-current-device (setq printer-current-device
76 (make-device 'msprinter printer-name))))
77
78 (defun Printer-clear-device ()
79 (setq printer-current-device nil))
72 80
73 (defcustom printer-page-header '((face bold date) nil (face bold buffer-name)) 81 (defcustom printer-page-header '((face bold date) nil (face bold buffer-name))
74 "*Controls printed page header. 82 "*Controls printed page header.
75 83
76 This can be: 84 This can be:
209 (user-id (format "%d" (user-uid))) 217 (user-id (format "%d" (user-uid)))
210 (user-name (format "%d" (user-login-name))) 218 (user-name (format "%d" (user-login-name)))
211 (t (error 'invalid-argument "Unrecognized print-context property" 219 (t (error 'invalid-argument "Unrecognized print-context property"
212 prop))))) 220 prop)))))
213 221
222 (defun generic-page-setup ()
223 "Display the Page Setup dialog box.
224 Changes made are recorded internally."
225 (interactive)
226 (let* ((d (Printer-get-device))
227 (props
228 (condition-case err
229 (make-dialog-box 'page-setup :device d
230 :properties default-msprinter-frame-plist)
231 (error
232 (Printer-clear-device)
233 (signal (car err) (cdr err))))))
234 (while props
235 (setq default-msprinter-frame-plist
236 (plist-put default-msprinter-frame-plist (car props) (cadr props)))
237 (setq props (cddr props)))))
238
214 (defun generic-print-buffer (&optional buffer display-print-dialog) 239 (defun generic-print-buffer (&optional buffer display-print-dialog)
215 "Print buffer BUFFER using a printing method appropriate to the O.S. being run. 240 "Print buffer BUFFER using a printing method appropriate to the O.S. being run.
216 Under Unix, `lpr' is normally used to spool out a no-frills version of the 241 Under Unix, `lpr' is normally used to spool out a no-frills version of the
217 buffer, or the `ps-print' package is used to pretty-print the buffer to a 242 buffer, or the `ps-print' package is used to pretty-print the buffer to a
218 PostScript printer. Under MS Windows, the built-in printing support is used. 243 PostScript printer. Under MS Windows, the built-in printing support is used.
229 If BUFFER is nil or omitted, the current buffer is used." 254 If BUFFER is nil or omitted, the current buffer is used."
230 (interactive (list nil (not current-prefix-arg))) 255 (interactive (list nil (not current-prefix-arg)))
231 (if (or (not (valid-specifier-tag-p 'msprinter)) 256 (if (or (not (valid-specifier-tag-p 'msprinter))
232 (not display-print-dialog)) 257 (not display-print-dialog))
233 (generic-print-region (point-min buffer) (point-max buffer) buffer) 258 (generic-print-region (point-min buffer) (point-max buffer) buffer)
234 (let* ((d (make-device 'msprinter printer-name)) 259 (let* ((d (Printer-get-device))
235 (props (make-dialog-box 'print :device d))) 260 (props (condition-case err
261 (make-dialog-box 'print :device d)
262 (error
263 (Printer-clear-device)
264 (signal (car err) (cdr err))))))
236 (and props (generic-print-region (point-min buffer) 265 (and props (generic-print-region (point-min buffer)
237 (point-max buffer) buffer 266 (point-max buffer) buffer
238 d props))))) 267 d props)))))
239 268
240 (defun generic-print-region (start end &optional buffer print-device props) 269 (defun generic-print-region (start end &optional buffer print-device props)
268 (cond ((valid-specifier-tag-p 'msprinter) 297 (cond ((valid-specifier-tag-p 'msprinter)
269 (let (d f header-buffer footer-buffer) 298 (let (d f header-buffer footer-buffer)
270 (setq buffer (decode-buffer buffer)) 299 (setq buffer (decode-buffer buffer))
271 (unwind-protect 300 (unwind-protect
272 (progn 301 (progn
273 (setq d (or print-device 302 (setq d (or print-device (Printer-get-device)))
274 (make-device 'msprinter printer-name)))
275 (setq f (make-frame 303 (setq f (make-frame
276 (list* 'name (concat 304 (list* 'name (concat
277 (substitute ?_ ?. (buffer-name buffer)) 305 (substitute ?_ ?. (buffer-name buffer))
278 " - XEmacs") 306 " - XEmacs")
279 '(menubar-visible-p 307 '(menubar-visible-p
387 pixvis)) 415 pixvis))
388 (scroll-down 1)))))) 416 (scroll-down 1))))))
389 (setq pageno (1+ pageno)))) 417 (setq pageno (1+ pageno))))
390 (setq copies (1- copies))))) 418 (setq copies (1- copies)))))
391 (and f (delete-frame f)) 419 (and f (delete-frame f))
392 (and d (delete-device d))
393 (and header-buffer (kill-buffer header-buffer)) 420 (and header-buffer (kill-buffer header-buffer))
394 (and footer-buffer (kill-buffer footer-buffer)) 421 (and footer-buffer (kill-buffer footer-buffer))
395 ))) 422 )))
396 ((and (not (eq system-type 'windows-nt)) 423 ((and (not (eq system-type 'windows-nt))
397 (fboundp 'lpr-region)) 424 (fboundp 'lpr-region))