2
1

More than 5 years have passed since last update.

Emacs: lpr-buffer で文字化けを回避する

Last updated at Posted at 2018-04-07

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 に以下の行を追加してください。

sample.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-switcheslpr-switches-add を追加して起動します。
自分は以下のように設定して C-u 起動時は文字が少し小さくなるようにしています。

sample.el
(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 のみです。

26.1 対応版 lpr-buffer-wrap.el

(emacs-version)
"GNU Emacs 26.1 (build 1, i686-w64-mingw32) of 2018-05-31"

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1