GNU Emacs Manual - MS-DOS Printing

Go to the first, previous, next, last section, table of contents.

## Printing and MS-DOS

Printing commands, such as `lpr-buffer` (see section Hardcopy Output) and `ps-print-buffer` (see section Postscript Hardcopy) can work in MS-DOS and MS-Windows by sending the output to one of the printer ports, if a Unix-style `lpr` program is unavailable. This behaviour is controlled by the same variables that control printing with `lpr` on Unix (see section Hardcopy Output, see section Variables for Postscript Hardcopy), but the defaults for these variables on MS-DOS and MS-Windows are not the same as the defaults on Unix.

If you want to use your local printer, printing on it in the usual DOS manner, then set the Lisp variable `lpr-command` to `""` (its default value) and `printer-name` to the name of the printer port--for example, `"PRN"`, the usual local printer port (that's the default), or `"LPT2"`, or `"COM1"` for a serial printer. You can also set `printer-name` to a file name, in which case "printed" output is actually appended to that file. If you set `printer-name` to `"NUL"`, printed output is silently discarded (sent to the system null device).

On MS-Windows, when the Windows network software is installed, you can also use a printer shared by another machine by setting `printer-name` to the UNC share name for that printer--for example, `"//joes_pc/hp4si"`. (It doesn't matter whether you use forward slashes or backslashes here.) To find out the names of shared printers, run the command ``net view'` at a DOS command prompt to obtain a list of servers, and ``net view server-name'` to see the names of printers (and directories) shared by that server.

If you set `printer-name` to a file name, it's best to use an absolute file name. Emacs changes the working directory according to the default directory of the current buffer, so if the file name in `printer-name` is relative, you will end up with several such files, each one in the directory of the buffer from which the printing was done.

The commands `print-buffer` and `print-region` call the `pr` program, or use special switches to the `lpr` program, to produce headers on each printed page. MS-DOS and MS-Windows don't normally have these programs, so by default, the variable `lpr-headers-switches` is set so that the requests to print page headers are silently ignored. Thus, `print-buffer` and `print-region` produce the same output as `lpr-buffer` and `lpr-region`, respectively. If you do have a suitable `pr` program (for example, from GNU Textutils), set `lpr-headers-switches` to `nil`; Emacs will then call `pr` to produce the page headers, and print the resulting output as specified by `printer-name`.

Finally, if you do have an `lpr` work-alike, you can set the variable `lpr-command` to `"lpr"`. Then Emacs will use `lpr` for printing, as on other systems. (If the name of the program isn't `lpr`, set `lpr-command` to specify where to find it.) The variable `lpr-switches` has its standard meaning when `lpr-command` is not `""`. If the variable `printer-name` has a string value, it is used as the value for the `-P` option to `lpr`, as on Unix.

A parallel set of variables, `ps-lpr-command`, `ps-lpr-switches`, and `ps-printer-name` (see section Variables for Postscript Hardcopy), defines how PostScript files should be printed. These variables are used in the same way as the corresponding variables described above for non-PostScript printing. Thus, the value of `ps-printer-name` is used as the name of the device (or file) to which PostScript output is sent, just as `printer-name` is used for non-PostScript printing. (There are two distinct sets of variables in case you have two printers attached to two different ports, and only one of them is a PostScript printer.)

The default value of the variable `ps-lpr-command` is `""`, which causes PostScript output to be sent to the printer port specified by `ps-printer-name`, but `ps-lpr-command` can also be set to the name of a program which will accept PostScript files. Thus, if you have a non-PostScript printer, you can set this variable to the name of a PostScript interpreter program (such as Ghostscript). Any switches that need to be passed to the interpreter program are specified using `ps-lpr-switches`. (If the value of `ps-printer-name` is a string, it will be added to the list of switches as the value for the `-P` option. This is probably only useful if you are using `lpr`, so when using an interpreter typically you would set `ps-printer-name` to something other than a string so it is ignored.)

For example, to use Ghostscript for printing on an Epson printer connected to the ``LPT2'` port, put this in your ``_emacs'` file:

    (setq ps-printer-name t)  ; Ghostscript doesn't understand -P
    (setq ps-lpr-command "c:/gs/gs386")
    (setq ps-lpr-switches '("-q" "-dNOPAUSE"
    			"-sDEVICE=epson"
    			"-r240x72"
    			"-sOutputFile=LPT2"
    			"-Ic:/gs"))

(This assumes that Ghostscript is installed in the ``"c:/gs"'` directory.)

For backwards compatibility, the value of `dos-printer` (`dos-ps-printer`), if it has a value, overrides the value of `printer-name` (`ps-printer-name`), on MS-DOS and MS-Windows only.

Go to the first, previous, next, last section, table of contents.