changeset 23802:4052a2875390

(direct-print-region-function): Try to ensure that printer-name is expanded to a file name on a local drive; sometimes printing a file loaded from a network volume fails. (direct-print-region-function): Add a function to write-region-annotate-functions to append a formfeed character to the region being printed, if the region doesn't end with a formfeed already. This avoids creating a second print job containing a blank page when print spooling is enabled on Windows.
author Geoff Voelker <voelker@cs.washington.edu>
date Wed, 02 Dec 1998 23:01:50 +0000
parents 119fd94ae526
children f112aa8f8f5d
files lisp/dos-w32.el
diffstat 1 files changed, 20 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/dos-w32.el	Wed Dec 02 23:00:29 1998 +0000
+++ b/lisp/dos-w32.el	Wed Dec 02 23:01:50 1998 +0000
@@ -273,21 +273,29 @@
   (let* ((coding coding-system-for-write)
 	 (coding-base
 	  (if (null coding) 'undecided (coding-system-base coding)))
-	 (eol-type (coding-system-eol-type coding-base)))
+	 (eol-type (coding-system-eol-type coding-base))
+	 (write-region-annotate-functions
+	  (cons
+	   (lambda (start end)
+	     ;; Make each print-out start on a new page, but don't waste
+	     ;; paper if there was a form-feed at the end of this file.
+	     (if (not (char-equal (char-after (1- end)) ?\C-l))
+		 `((,end . "\f"))))
+	   write-region-annotate-functions)))
     (or (eq coding-system-for-write 'no-conversion)
 	(setq coding-system-for-write
 	      (aref eol-type 1)))	; force conversion to DOS EOLs
-    (write-region start end
-		  (or (and (boundp 'dos-printer) dos-printer)
-		      printer-name)
-		  t 0)
-    ;; Make each print-out start on a new page, but don't waste
-    ;; paper if there was a form-feed at the end of this file.
-    (if (not (char-equal (char-after (1- end)) ?\C-l))
-	(write-region "\f" nil
-		      (or (and (boundp 'dos-printer) dos-printer)
-			  printer-name)
-		      t 0))))
+    (let ((printer (or (and (boundp 'dos-printer)
+			    (stringp (symbol-value 'dos-printer))
+			    (symbol-value 'dos-printer))
+		       printer-name))
+	  ;; It seems that we must be careful about the directory name
+	  ;; that gets added by write-region when using the standard
+	  ;; "PRN" or "LPTx" ports.  The call can fail if the directory
+	  ;; is on a network drive.
+	  (safe-dir (or (getenv "windir") (getenv "TMPDIR") "c:/")))
+      (write-region start end
+		    (expand-file-name printer safe-dir) t 0))))
 
 ;; Set this to nil if you have a port of the `lpr' program and
 ;; you want to use it for printing.  If the default setting is