■ Windows Subsystem for Linux の Emacs で利用できる設定


【お知らせ】


<2021/02/05 追記>
本ページの内容は WSL2 でも動作します。DrvFs や VolFs の記載がある場合には、Windows 側のファイルシステム、WSL2 側のファイルシステムと読み替えてください。

<2019/09/24 追記>
Windows 10 1903 用 wslstart を使うと、本設定が正常に動かないことがわかったので、設定に sit-for を追加しました。

<2018/11/28 追記>
印刷のためのファイルを開くために使っている wslstart の内部処理(作成したテンポラリーファイルを削除する処理)が正常に機能していませんでした。wslstart を nohup で起動することで解決することが分かったので、その対応を行いました。

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

<2018/03/20 追記>
wslstart を使った方法に見直しました。これで印刷用に開くプログラムが Emacs より上位に表示されるようになりました。

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

【本題】


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

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

1) 次の設定を行う。

2) 以下の設定を有効にする。
(require 'cl-lib)

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

;; 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)))
          (let ((coding-system-for-write 'cp932-dos))
            (write-region start end tmp-file))
          (set-process-sentinel
           (start-process "print-buffer" nil print-program tmp-file)
           ;; wslstart for Windows 10 1809 or earlier を利用する場合は上記行の代わりに以下を利用する
           ;; (start-process-shell-command "print-buffer" nil
           ;;                              (format "nohup %s %s > /dev/null 2>&1" print-program tmp-file))
           (lambda (process state)
             (sit-for 2)
             (when (file-exists-p tmp-file)
               (delete-file tmp-file)))))))

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


<変更履歴>
  • 2017/05/27 このページを作成した。
  • 2018/03/20 wslstart を使って動作するように見直した。
  • 2018/11/28 印刷のためのファイルを開くために使っている wslstart の起動方法を変更した。
  • 2019/09/24 Windows 10 1903 用 wslstart を使うと、本設定が正常に動かないことがわかったので、設定に sit-for を追加した。


最終更新:2021年02月05日 09:38