Mercurial > hg > xemacs-beta
comparison 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 |
comparison
equal
deleted
inserted
replaced
902:2fd2239ea63a | 903:4a27df428c73 |
---|---|
74 (defun Printer-get-device () | 74 (defun Printer-get-device () |
75 (or printer-current-device (setq printer-current-device | 75 (or printer-current-device (setq printer-current-device |
76 (make-device 'msprinter printer-name)))) | 76 (make-device 'msprinter printer-name)))) |
77 | 77 |
78 (defun Printer-clear-device () | 78 (defun Printer-clear-device () |
79 ;; relying on GC to delete the device is too error-prone since there | |
80 ;; only can be one anyway. | |
81 (and printer-current-device (delete-device printer-current-device)) | |
79 (setq printer-current-device nil)) | 82 (setq printer-current-device nil)) |
80 | 83 |
81 (defcustom printer-page-header '((face bold date) nil (face bold buffer-name)) | 84 (defcustom printer-page-header '((face bold date) nil (face bold buffer-name)) |
82 "*Controls printed page header. | 85 "*Controls printed page header. |
83 | 86 |
254 anything. When called interactively, use a prefix arg to suppress the | 257 anything. When called interactively, use a prefix arg to suppress the |
255 display of the print dialog box. | 258 display of the print dialog box. |
256 | 259 |
257 If BUFFER is nil or omitted, the current buffer is used." | 260 If BUFFER is nil or omitted, the current buffer is used." |
258 (interactive (list nil (not current-prefix-arg))) | 261 (interactive (list nil (not current-prefix-arg))) |
259 (let* ((print-region (and (interactive-p) (region-active-p))) | 262 (condition-case err |
260 (start (if print-region (region-beginning) (point-min buffer))) | 263 (let* ((print-region (and (interactive-p) (region-active-p))) |
261 (end (if print-region (region-end) (point-max buffer)))) | 264 (start (if print-region (region-beginning) (point-min buffer))) |
262 (if (or (not (valid-specifier-tag-p 'msprinter)) | 265 (end (if print-region (region-end) (point-max buffer)))) |
263 (not display-print-dialog)) | 266 (if (or (not (valid-specifier-tag-p 'msprinter)) |
264 (generic-print-region start end buffer) | 267 (not display-print-dialog)) |
265 (let* ((d (Printer-get-device)) | 268 (generic-print-region start end buffer) |
266 (props (condition-case err | 269 (let* ((d (Printer-get-device)) |
267 (make-dialog-box 'print :device d | 270 (props (make-dialog-box 'print :device d |
268 :allow-selection print-region | 271 :allow-selection print-region |
269 :selected-page-button | 272 :selected-page-button |
270 (if print-region 'selection 'all)) | 273 (if print-region 'selection 'all)))) |
271 (error | 274 (and props |
272 (Printer-clear-device) | 275 (let ((really-print-region |
273 (signal (car err) (cdr err)))))) | 276 (eq (plist-get props 'selected-page-button) 'selection))) |
274 (and props | 277 (generic-print-region (if really-print-region start |
275 (let ((really-print-region | 278 (point-min buffer)) |
276 (eq (plist-get props 'selected-page-button) 'selection))) | 279 (if really-print-region end |
277 (generic-print-region (if really-print-region start | 280 (point-max buffer)) |
278 (point-min buffer)) | 281 buffer d props)))))) |
279 (if really-print-region end | 282 (error |
280 (point-max buffer)) | 283 ;; Make sure we catch all errors thrown from the native code. |
281 buffer d props))))))) | 284 (Printer-clear-device) |
285 (signal (car err) (cdr err))))) | |
282 | 286 |
283 (defun generic-print-region (start end &optional buffer print-device props) | 287 (defun generic-print-region (start end &optional buffer print-device props) |
284 "Print region using a printing method appropriate to the O.S. being run. | 288 "Print region using a printing method appropriate to the O.S. being run. |
285 The region between START and END of BUFFER (defaults to the current | 289 The region between START and END of BUFFER (defaults to the current |
286 buffer) is printed. | 290 buffer) is printed. |
336 default-toolbar-visible-p nil | 340 default-toolbar-visible-p nil |
337 default-gutter-visible-p nil | 341 default-gutter-visible-p nil |
338 minibuffer none | 342 minibuffer none |
339 modeline-shadow-thickness 0 | 343 modeline-shadow-thickness 0 |
340 vertical-scrollbar-visible-p nil | 344 vertical-scrollbar-visible-p nil |
341 horizontal-scrollbar-visible-p nil)) | 345 horizontal-scrollbar-visible-p nil |
346 [default foreground] "black" | |
347 [default background] "white")) | |
342 d)) | 348 d)) |
343 (let* ((w (frame-root-window f)) | 349 (let* ((w (frame-root-window f)) |
344 (vertdpi | 350 (vertdpi |
345 (cdr (device-system-metric d 'device-dpi))) | 351 (cdr (device-system-metric d 'device-dpi))) |
346 (pixel-vertical-clip-threshold (/ vertdpi 2)) | 352 (pixel-vertical-clip-threshold (/ vertdpi 2)) |
356 (declare-fboundp | 362 (declare-fboundp |
357 (mswindows-get-default-printer) | 363 (mswindows-get-default-printer) |
358 )))) | 364 )))) |
359 header-window | 365 header-window |
360 footer-window) | 366 footer-window) |
361 | 367 |
362 (when printer-page-header | 368 (when printer-page-header |
363 (let ((window-min-height 2)) | 369 (let ((window-min-height 2)) |
364 (setq header-window w) | 370 (setq header-window w) |
365 (setq w (split-window w 2))) | 371 (setq w (split-window w 2))) |
366 (setq header-buffer | 372 (setq header-buffer |
367 (generate-new-buffer " *header*")) | 373 (generate-new-buffer " *header*")) |
368 (set-window-buffer header-window header-buffer)) | 374 (set-window-buffer header-window header-buffer)) |
369 | 375 |
370 (when printer-page-footer | 376 (when printer-page-footer |
371 (let ((window-min-height 2)) | 377 (let ((window-min-height 2)) |
372 (setq footer-window | 378 (setq footer-window |
373 (split-window w (- (window-height w) 2)))) | 379 (split-window w (- (window-height w) 2)))) |
374 (setq footer-buffer | 380 (setq footer-buffer |
375 (generate-new-buffer " *footer*")) | 381 (generate-new-buffer " *footer*")) |
376 (set-window-buffer footer-window footer-buffer)) | 382 (set-window-buffer footer-window footer-buffer)) |
377 | 383 |
378 (setf (Print-context-window context) w) | 384 (setf (Print-context-window context) w) |
379 | 385 |
380 (let ((last-end 0) ; bufpos at end of previous page | 386 (let ((last-end 0) ; bufpos at end of previous page |
381 reached-end ; t if we've reached the end of the | 387 reached-end ; t if we've reached the end of the |
382 ; text we're printing | 388 ; text we're printing |
383 (pageno 1)) | 389 (pageno 1)) |
384 (set-window-buffer w buffer) | 390 (set-window-buffer w buffer) |