■ Windows版 Emacs 共通の設定


【お知らせ】


<2018/03/22 追記>
「-*- lexical-binding: t -*-」を使うバージョンは、正常に動作していませんでしたので削除しました。(coding-system-for-write をセットする let も lexical で動いていたため。)
(2018/05/07 追記)その後、defvar を用いることでの対応方法があることが分かりましたが、とりあえず lexical-let を利用したもののみを紹介することとしました。

<2017/05/28 追記>
Windows Subsystem for Linux の Emacs で動作するバージョンもあります。お試しください。

【本題】


Windows のテキストエディタを使って、バッファの内容を印刷するための設定です。

次のページの内容を参考とし、Cygwin版 Emacs でも動くように調整したものです。

なお、本機能で開いたファイルはテンポラリーなものです。このファイルを編集しても元のファイルは変更されませんのでご注意ください。
(require 'cl-lib)

;; 印刷のために使うプログラムを指定する
(defconst print-program "notepad.exe")

;; lpr-bufferコマンド で Windows のテキストエディタが開くようにする
(setq print-region-function
      (lambda (start end program
                     &optional delete destination display
                     &rest args)
        (lexical-let* ((tmp-file (expand-file-name (concat (make-temp-name "print-") ".txt")
                                                   temporary-file-directory))
                       (win-file (if (fboundp 'cygwin-convert-file-name-to-windows)
                                     (cygwin-convert-file-name-to-windows tmp-file)
                                   tmp-file)))
          (let ((coding-system-for-write 'cp932-dos))
            (write-region start end win-file))
          (set-process-sentinel
           (start-process "print-buffer" nil print-program win-file)
           (lambda (process state)
             (when (file-exists-p win-file)
               (delete-file win-file)))))))

;; lpr-buffer を実行する
(global-set-key (kbd "C-c C-p")
                (lambda ()
                  (interactive)
                  (lpr-buffer)))

Cygwin版 Emacs の場合、次の設定の print-program 変数の値を cygstart にすることでも動作すると思います。こちらの方がシンプルな設定かもしれません。


<変更履歴>
  • 2015/06/11 このページを作成した。
  • 2015/09/09 「-*- lexical-binding: t -*-」を使うバージョンを追加した。


最終更新:2019年11月01日 12:37