Mercurial > hg > xemacs-beta
diff lisp/printer.el @ 903:4a27df428c73
[xemacs-hg @ 2002-07-06 05:48:14 by andyp]
sync with 21.4
author | andyp |
---|---|
date | Sat, 06 Jul 2002 05:48:22 +0000 |
parents | 79c6ff3eef26 |
children | 01c57eb70ae9 |
line wrap: on
line diff
--- a/lisp/printer.el Fri Jul 05 22:15:04 2002 +0000 +++ b/lisp/printer.el Sat Jul 06 05:48:22 2002 +0000 @@ -76,6 +76,9 @@ (make-device 'msprinter printer-name)))) (defun Printer-clear-device () + ;; relying on GC to delete the device is too error-prone since there + ;; only can be one anyway. + (and printer-current-device (delete-device printer-current-device)) (setq printer-current-device nil)) (defcustom printer-page-header '((face bold date) nil (face bold buffer-name)) @@ -256,29 +259,30 @@ If BUFFER is nil or omitted, the current buffer is used." (interactive (list nil (not current-prefix-arg))) - (let* ((print-region (and (interactive-p) (region-active-p))) - (start (if print-region (region-beginning) (point-min buffer))) - (end (if print-region (region-end) (point-max buffer)))) - (if (or (not (valid-specifier-tag-p 'msprinter)) - (not display-print-dialog)) - (generic-print-region start end buffer) - (let* ((d (Printer-get-device)) - (props (condition-case err - (make-dialog-box 'print :device d + (condition-case err + (let* ((print-region (and (interactive-p) (region-active-p))) + (start (if print-region (region-beginning) (point-min buffer))) + (end (if print-region (region-end) (point-max buffer)))) + (if (or (not (valid-specifier-tag-p 'msprinter)) + (not display-print-dialog)) + (generic-print-region start end buffer) + (let* ((d (Printer-get-device)) + (props (make-dialog-box 'print :device d :allow-selection print-region :selected-page-button - (if print-region 'selection 'all)) - (error - (Printer-clear-device) - (signal (car err) (cdr err)))))) - (and props - (let ((really-print-region - (eq (plist-get props 'selected-page-button) 'selection))) - (generic-print-region (if really-print-region start - (point-min buffer)) - (if really-print-region end - (point-max buffer)) - buffer d props))))))) + (if print-region 'selection 'all)))) + (and props + (let ((really-print-region + (eq (plist-get props 'selected-page-button) 'selection))) + (generic-print-region (if really-print-region start + (point-min buffer)) + (if really-print-region end + (point-max buffer)) + buffer d props)))))) + (error + ;; Make sure we catch all errors thrown from the native code. + (Printer-clear-device) + (signal (car err) (cdr err))))) (defun generic-print-region (start end &optional buffer print-device props) "Print region using a printing method appropriate to the O.S. being run. @@ -338,7 +342,9 @@ minibuffer none modeline-shadow-thickness 0 vertical-scrollbar-visible-p nil - horizontal-scrollbar-visible-p nil)) + horizontal-scrollbar-visible-p nil + [default foreground] "black" + [default background] "white")) d)) (let* ((w (frame-root-window f)) (vertdpi @@ -358,7 +364,7 @@ )))) header-window footer-window) - + (when printer-page-header (let ((window-min-height 2)) (setq header-window w) @@ -366,7 +372,7 @@ (setq header-buffer (generate-new-buffer " *header*")) (set-window-buffer header-window header-buffer)) - + (when printer-page-footer (let ((window-min-height 2)) (setq footer-window @@ -374,9 +380,9 @@ (setq footer-buffer (generate-new-buffer " *footer*")) (set-window-buffer footer-window footer-buffer)) - + (setf (Print-context-window context) w) - + (let ((last-end 0) ; bufpos at end of previous page reached-end ; t if we've reached the end of the ; text we're printing