Crossroad (tunefsの日記)

2006-05-01

NTEmacsからnotepadを使って印刷

Meadowの設定例を参考に、

  • プリンタドライバで2in1などを行いため、いきなり印刷しない(/pオプションを取る)
  • 同期(call-process)だと、notepad起動中emacsが操作できなくなるので、非同期(start-process)にしたい

という変更を加えてみた。

(setq print-region-function
      (lambda (start end
                     &optional lpr-prog
                     delete-text buf display
                     &rest rest)
        (let* ((procname (make-temp-name "w32-print-"))
               (tempfile
                (subst-char-in-string
                 ?/ ?\\
                 (expand-file-name procname temporary-file-directory)))
               (coding-system-for-write 'sjis-dos))
          (write-region start end tempfile)
          (set-process-sentinel
           (start-process procname nil "notepad.exe" tempfile)
           (lambda (process event)
             (let ((tempfile
                    (expand-file-name (process-name process)
                                      temporary-file-directory)))
               (when (file-exists-p tempfile)
                 (delete-file tempfile))))))))

これでprint-bufferすればnotepadが起動する。

なお、動作確認はNTEmacs 22.0.50のみ。