Windows の Emacs から ak2pr.exe を使って lpr-buffer
でテキストをプリントアウトするとき、文字コードが sjis
でないと文字化けしてしまうので、プリンタ出力に送り出すときに sjis
化するためのアドバイスです。
ファイル自体のコードはそのままで変更されません。
はじめのうちはその都度手動でコードを変換してプリントしていたのですが (C-x RET f)
、ときどきそれをし忘れてバケバケになり紙を無駄にすることがあり作ったものです。
ちなみにこの元になったものがおそらくはじめて書いたまともな Emacs lisp です。
lpr-buffer, lpr-region, print-buffer, print-region に作用します。
ダウンロードとインストール
ここからダウンロードして、 load-path
の通ったディレクトリに置き init.el
に以下の行を追加してください。
(require 'lpr-buffer-wrap)
y-or-n-p
元々 lpr-buffer
は起動時に問い合わせが入らなかったのですが、現在は問い合わせが入るようになり M-x lpr-buffer
として起動するときは鬱陶しいので、そのときは問合せが入らないようにしてあります。
キーバインドしてそこから起動した場合は問い合わせが入ります。
lpr-region
部分印刷したいのに M-x lpr-region
とせず指癖で M-x lpr-buffer
として失敗することがある為、それを自動で回避するため、リージョンがある場合 lpr-buffer
で起動しても lpr-region
になるようになっています。
dired P
dired から P
でもプリントできますが、そちらはマークファイルを外部コマンドに丸投げしていてこのパッチの効力が無いので、lpr-buffer
で出力する関数で置き換えています。
オプション変数
prefix 付で起動すると lpr-switches
に lpr-switches-add
を追加して起動します。
自分は以下のように設定して C-u 起動時は文字が少し小さくなるようにしています。
(setq lpr-command "c:/emacs-25.1/bin/ak2pr/bin/ak2pr.exe"
lpr-add-switches t
lpr-command-switches nil)
(setq lpr-switches '("-op" "-u1" "-sA4" "-bl")
lpr-switches-add '("-f9"))
もちろん dired から P
で印字するときも C-u P
は有効です。
print-buffer について
lpr-buffer
の亜種のコマンドにヘッダを追加する print-buffer
がありますが、Windows, ak2pr そして自分のプリンタとの組み合わせのときはその効果が無効なようで lpr-buffer
と同じ出力になります。
が、念のためこちらも lpr-buffer
同様の効力があるように、lpr-buffer
(print-buffer)
よりも下位の印刷ルーチンを乗っ取っているので、好みの方をお使いください。
動作確認バージョン
GNU Emacs 25.3.1 (i686-w64-mingw32)
of 2017-09-18
Emacs 26.1 への対応修正 (Sat Jun 23 2018)
もっと良い方法があるのかもしれませんが、this-command-keys-vector
の返り値でキーバインドから実行されたものかどうか判別していて、 26.1
でその値が変わっていてうまく判別できなくなっていたので修正しました。
変更は関数 y-or-n-p-lpr
のみです。
(emacs-version)
"GNU Emacs 26.1 (build 1, i686-w64-mingw32) of 2018-05-31"