X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/3917863bc11c3936eb35d3c962e79d3717be612a..4e7428f6fd0a01d77e3ad78c54849358839aeb6f:/lisp/lpr.el diff --git a/lisp/lpr.el b/lisp/lpr.el index 301a50af9a..21a1ed24f8 100644 --- a/lisp/lpr.el +++ b/lisp/lpr.el @@ -41,15 +41,15 @@ \(Note that PostScript files are sent to `ps-printer-name', which see.\) On Unix-like systems, a string value should be a name understood by -lpr's -P option. - -On MS-DOS and MS-Windows systems, it is the name of a printer device or -port. Typical non-default settings would be \"LPT1\" to \"LPT3\" for -parallel printers, or \"COM1\" to \"COM4\" or \"AUX\" for serial -printers, or \"//hostname/printer\" for a shared network printer. You -can also set it to a name of a file, in which case the output gets -appended to that file. If you want to discard the printed output, set -this to \"NUL\"." +lpr's -P option; otherwise the value should be nil. + +On MS-DOS and MS-Windows systems, a string value is taken as the name of +a printer device or port, provided `lpr-command' is set to \"\". +Typical non-default settings would be \"LPT1\" to \"LPT3\" for parallel +printers, or \"COM1\" to \"COM4\" or \"AUX\" for serial printers, or +\"//hostname/printer\" for a shared network printer. You can also set +it to the name of a file, in which case the output gets appended to that +file. If you want to discard the printed output, set this to \"NUL\"." :type '(choice ; could use string but then we lose completion for files. (file :tag "Name") (const :tag "Default" nil)) @@ -74,9 +74,22 @@ this variable should be nil." ;;;###autoload (defcustom lpr-command - (if (memq system-type '(usg-unix-v dgux hpux irix)) - "lp" "lpr") - "*Name of program for printing a file." + (cond + ((memq system-type '(ms-dos windows-nt)) + "") + ((memq system-type '(usg-unix-v dgux hpux irix)) + "lp") + (t + "lpr")) + "*Name of program for printing a file. + +On MS-DOS and MS-Windows systems, if the value is an empty string then +Emacs will write directly to the printer port named by `printer-name'. +The programs `print' and `nprint' (the standard print programs on +Windows NT and Novell Netware respectively) are handled specially, using +`printer-name' as the destination for output; any other program is +treated like `lpr' except that an explicit filename is given as the last +argument." :type 'string :group 'lpr) @@ -102,7 +115,7 @@ See definition of `print-region-1' for calling conventions." ;; Berkeley systems support -F, and GNU pr supports both -f and -F, ;; So it looks like -F is a better default. -(defcustom lpr-page-header-switches '("-F") +(defcustom lpr-page-header-switches '("-h" "-F") "*List of strings to use as options for the page-header-generating program. The variable `lpr-page-header-program' specifies the program to use." :type '(repeat string) @@ -110,29 +123,51 @@ The variable `lpr-page-header-program' specifies the program to use." ;;;###autoload (defun lpr-buffer () - "Print buffer contents as with Unix command `lpr'. -`lpr-switches' is a list of extra switches (strings) to pass to lpr." + "Print buffer contents without pagination or page headers. +See the variables `lpr-switches' and `lpr-command' +for customization of the printer command." (interactive) (print-region-1 (point-min) (point-max) lpr-switches nil)) ;;;###autoload (defun print-buffer () - "Print buffer contents as with Unix command `lpr -p'. -`lpr-switches' is a list of extra switches (strings) to pass to lpr." + "Paginate and print buffer contents. + +The variable `lpr-headers-switches' controls how to paginate. +If it is nil (the default), we run the `pr' program (or whatever program +`lpr-page-header-program' specifies) to paginate. +`lpr-page-header-switches' specifies the switches for that program. + +Otherwise, the switches in `lpr-headers-switches' are used +in the print command itself; we expect them to request pagination. + +See the variables `lpr-switches' and `lpr-command' +for further customization of the printer command." (interactive) (print-region-1 (point-min) (point-max) lpr-switches t)) ;;;###autoload (defun lpr-region (start end) - "Print region contents as with Unix command `lpr'. -`lpr-switches' is a list of extra switches (strings) to pass to lpr." + "Print region contents without pagination or page headers. +See the variables `lpr-switches' and `lpr-command' +for customization of the printer command." (interactive "r") (print-region-1 start end lpr-switches nil)) ;;;###autoload (defun print-region (start end) - "Print region contents as with Unix command `lpr -p'. -`lpr-switches' is a list of extra switches (strings) to pass to lpr." + "Paginate and print the region contents. + +The variable `lpr-headers-switches' controls how to paginate. +If it is nil (the default), we run the `pr' program (or whatever program +`lpr-page-header-program' specifies) to paginate. +`lpr-page-header-switches' specifies the switches for that program. + +Otherwise, the switches in `lpr-headers-switches' are used +in the print command itself; we expect them to request pagination. + +See the variables `lpr-switches' and `lpr-command' +for further customization of the printer command." (interactive "r") (print-region-1 start end lpr-switches t)) @@ -181,20 +216,23 @@ The variable `lpr-page-header-program' specifies the program to use." (setq start (car new-coords) end (cdr new-coords))) (apply 'call-process-region start end lpr-page-header-program t t nil - (nconc (list "-h" title) - lpr-page-header-switches)) + lpr-page-header-switches) (setq start (point-min) end (point-max)))) - (apply (or print-region-function 'call-process-region) - (nconc (list start end lpr-command - nil nil nil) - (nconc (and lpr-add-switches - (list "-J" name)) - ;; These belong in pr if we are using that. - (and lpr-add-switches lpr-headers-switches - (list "-T" title)) - (and (stringp printer-name) - (list (concat "-P" printer-name))) - switches))) + (let ((printer-name-switch (if (memq system-type + '(usg-unix-v dgux hpux irix)) + "-d" "-P"))) + (apply (or print-region-function 'call-process-region) + (nconc (list start end lpr-command + nil nil nil) + (nconc (and lpr-add-switches + (list "-J" name)) + ;; These belong in pr if we are using that. + (and lpr-add-switches lpr-headers-switches + (list "-T" title)) + (and (stringp printer-name) + (list (concat printer-name-switch + printer-name))) + switches)))) (if (markerp end) (set-marker end nil)) (message "Spooling%s...done" switch-string))))