Next: , Previous: , Up: EmacsとMicrosoft Windows/MS-DOS   [Contents][Index]


H.9 MS-Windowsでの印刷

POSIXスタイルのlprプログラムが利用できない場合、MS-DOSとMS-Windowsでは、lpr-buffer(ハードコピーの印刷を参照してください)やps-print-buffer(PostScriptのハードコピーを参照してください)のような印刷コマンドは、プリンターポートの1つに出力を送ります。同じEmacs変数がすべてのシステムでの印刷を制御しますが、MS-DOSとMS-Windowsでは、それらの変数が異なるデフォルト値をもつ場合があります。

MS WindowsのEmacsは、(関数default-printer-nameを使用して)デフォルトプリンターの自動検出を試みます。しかし、これはある稀なケースでは失敗することがあり、Emacsから別のプリンターを使用したいと思うときがあるかもしれません。このセクションの残りの部分では、Emacsに使用するプリンターを指示する方法を説明します。

ローカルプリンターを使用したい場合、Lisp変数lpr-command""(これはWindowsではデフォルトです)をセットして、printer-nameにプリンターポート、たとえば通常のローカルプリンターポート"PRN"、または"LPT2"、またはシリアルプリンターにたいする"COM1"などをセットします。printer-nameにファイル名をセットすることもできます。この場合、“印刷”された出力は、そのファイルに追加されます。printer-name"NUL"にセットした場合、印刷された出力は破棄されます(システムのnullデバイスに送られます)。

printer-nameにそのプリンターのUNC共有名 — たとえば"//joes_pc/hp4si"のような — をセットすることにより、他のマシンで共有されているプリンターを使用することもできます(ここではスラッシュを使用するか、バックスラッシュを使用するかは問題ではありません)。共有プリンターの名前を探すには、サーバーのリストを取得するために、コマンドプロンプトでコマンド‘net view’を実行して、‘net view server-name’でそのサーバーで共有されているプリンター(とディレクトリー)の名前を確認します。かわりにデスクトップの‘Network Neighborhood’アイコンをクリックして、ネットワークを通じてプリンターを共有しているマシンを確認することもできます。

プリンターが‘net view’で出力されない場合、またはprinter-nameにUNC共有名をセットしても、そのプリンターからハードコピーが出力されない場合、‘net use’コマンドを使用して、"LPT2"のようなローカルプリンターポートを、ネットワークプリンターに接続できます。たとえばnet use LPT2: \\joes_pc\hp4si30により、WindowsにLPT2ポートをキャプチャーさせて、印刷物をマシンjoes_pcに接続されているプリンターにリダイレクトします。このコマンド後は、printer-name"LPT2"をセットすることにより、そのネットワークプリンターでハードコピーが印刷されます。

あるWindowsネットワークソフトウェアーでは、"LPT2"のような特定のプリンターポートをキャプチャーして、‘net use’のかわりにControl Panel->Printersを通じてネットワークプリンターにリダイレクトするよう、Windowsに指示できます。

printer-nameにファイル名をセットする場合、絶対ファイル名を使用するのが最良です。Emacsはカレントバッファーのデフォルトディレクトリーに合わせて作業ディレクトリーを変更するので、printer-nameのファイル名が相対ファイル名の場合、結果として印刷が行なわれたバッファーのディレクトリーごとに、複数のファイルができてしまいます。

変数printer-nameの値が正しいのに、印刷してもそのプリンターからハードコピーが印刷されない場合、そのプリンターがプレーンテキストの印刷をサポートしない可能性があります(安価なプリンターのいくつかでは、この機能が省略されています)。そのような場合、以下で説明するPostScriptプリントコマンドを試してみてください。

コマンドprint-bufferおよびprint-regionは、印刷された各ページにヘッダーを生成するために、prプログラムを呼び出すか、lprプログラムの特別なスイッチを使用します。通常MS-DOSとMS-Windowsにはこれらのプログラムがないので、デフォルトでは印刷ページのヘッダーの印刷リクエストは単に無視されるように、lpr-headers-switchesがセットされています。したがってprint-bufferprint-regionは、lpr-bufferおよびlpr-regionと同じ出力を生成します。適切なprプログラム(たとえばGNU Coreutilsのもの)がある場合は、lpr-headers-switchesnilをセットします。するとEmacsはページヘッダーを生成するためにprを呼び出し、その結果をprinter-nameで指定されたプリンターで印刷します。

最後に、もしlprによく似たものがある場合、変数lpr-command"lpr"にセットします。するとEmacsは他のシステムと同じように、印刷にlprを使用します(そのプログラムの名前がlprでない場合は、lpr-commandに適切な値をセットします)。lpr-command""でないときに、変数lpr-switchesは、その標準的な意味をもちます。変数printer-nameの値が文字列のとき、Unixの場合のように、lpr-Pオプションの値としてその文字列が使用されます。

類似の変数ps-lpr-commandps-lpr-switchesps-printer-name (PostScriptハードコピーにたいする変数を参照してください)は、PostScriptファイルがどのように印刷されるかを定義します。これらの変数は、上記で説明した非PostScript印刷にたいする変数と同じ方法で使用されます。したがって非PostScript印刷にたいしてprinter-nameが使用される方法と同様に、ps-printer-nameの値はPostScript出力が送られるデバイス(またはファイル)の名前として使用されます(2つの異なるポートに接続された2つのプリンターがあり、それらの1つだけがPostScriptプリンターの場合、2つの個別の変数セットをもつことができます)。

変数ps-lpr-commandのデフォルト値は""で、これはPostScript出力をps-printer-nameで指定されたプリンターポートに送りますが、ps-lpr-commandにはPostScriptファイルを受け付けるプログラム名をセットすることもできます。したがって非PostScriptプリンターがある場合、この変数に(Ghostscriptのような)PostScriptのインタープリタープログラムをセットできます。インタープリタープログラムに渡す必要があるスイッチを指定するには、ps-lpr-switchesを使用します(ps-printer-nameの値が文字列の場合、-Pオプションにたいする値として、スイッチのリストが追加されます。これはおそらくlprを使用する場合だけ有用なので、インタープリターを使用するときはps-printer-nameに文字列以外の何かをセットすれば、無視させることができます)。

たとえばシステムのデフォルトプリンターで、Ghostscriptを使用して印刷するには、以下を.emacsに記述します:

(setq ps-printer-name t)
(setq ps-lpr-command "D:/gs6.01/bin/gswin32c.exe")
(setq ps-lpr-switches '("-q" "-dNOPAUSE" "-dBATCH"
                        "-sDEVICE=mswinpr2"
                        "-sPAPERSIZE=a4"))

(GhostscriptがディレクトリーD:/gs6.01にインストールされていると仮定します。)


Footnotes

(30)

printer-nameの値は、スラッシュとバックスラッシュの両方でセットできますが、‘net use’コマンドはUNC共有名がWindowsスタイルのバックスラッシュでタイプされるのを要求することに注意してください。