torutkのブログ

ソフトウェア・エンジニアのブログ

Windows上のemacsでマークアップテキストのプレビュー表示をする

最近出張する機会が多かったので、個人所有のノートPCを持参し、移動中の電車内や途中の喫茶、宿泊先で使っています。Wikiやブログの執筆に使うことが多いのですが、出先では必ずしもインターネットに接続できるとは限りません*1

大抵のWiki、ブログはインターネット接続されたPCでWebブラウザ上で記述するので、移動中でネット接続がない環境では作業ができないことが多くなります。

そこで、Wikiやブログで多く採用されているマークアップテキストをテキストエディタで記述し、プレビューできる環境を探してみました。

Pandocを使う

次のブログで紹介されていました。
Emacsでお手軽にEPUBとかMarkdownの文書を読めるやつ

セットアップ(Windows

Windows用のEmacs 25.3が入手できます。
http://cha.la.coocan.jp/doc/NTEmacs.html

PandocのWindows版を入手します。MSI形式インストーラが提供されています。
http://pandoc.org/installing.html

pandoc.elを入手します。
https://github.com/zonuexe/pandoc.el

init.elに記載

(require 'pandoc)
(pandoc-turn-on-advice-eww)

あとは、M-x pandoc-open-eww でファイルを指定すればewwでプレビュー表示となります。

トラブルシュート

対象ファイルはUTF-8

マークアップテキストの文字エンコーディングUTF-8ではない場合*2、次のエラーとなります。

pandoc.exe: Cannot decode byte '\x82': Data.Text.Internal.Encoding.decodeUtf8: Invalid UTF-8 stream
Emacsエンコーディング

マークアップテキストの文字エンコーディングUTF-8にしても、shift-jisを使っているとエラーがでました。

These default coding systems were tried to encode text
in the buffer ‘emacs-pandoc_mode.textile.html’:

emacsが生成する一時ファイルの文字エンコーディングUTF-8ではなくシフトJISになっているのが原因と思われます。

emacsの設定ファイルinit.elに次のように記述すると、実行する環境に合わせてエンコーディングが設定されます。emacsで日本語を扱うときは、一般的に次のように日本語用の設定をしています。

(set-language-environment "Japanese")

実行環境に応じたエンコーディングが設定されます。Windows環境では次のようになっていました。

  (japanese-shift-jis iso-2022-jp japanese-iso-8bit iso-2022-jp-2 utf-8 iso-2022-7bit iso-latin-1 iso-2022-8bit-ss2 emacs-mule raw-text in-is13194-devanagari utf-8-auto ...)
  • *scratch*バッファで、(coding-system-priority-list) をC-jで評価すると上述が得られました

そこで、次の設定をinit.elに、上述の(set-language-environment "Japanese")より後ろに記述します。

(prefer-coding-system 'utf-8-unix)

*1:いま出張先でこの日記を書いていますが、ホテルの部屋の有線LANに繋いでもうんともすんとも言わずインターネット接続が利用できていません。スマフォのテザリングで接続中

*2:日本語版Windows OS上では歴史的経緯で文字エンコーディングにCP932(シフトJISに拡張文字が加わったもの)を使うOS標準ツール・アプリケーションが多い