Text and Binary MS-DOS MS-DOS and MULE
Printing commands, such as lpr-buffer
(see Hardcopy) and
ps-print-buffer
(see Postscript) 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 Hardcopy, see Postscript Variables), 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 Postscript Variables), 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.