■ 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