雑文発散

«前の日記(2014-08-14) 最新 次の日記(2014-08-16)» 編集
過去の日記

2014-08-15 [長年日記]

[Emacs] markdown-mode で使う外部コマンドを markdown から marked に変更した

今まで Markdown から HTML へ変換する外部コマンドとして、markdown コマンドを使ってきた。

これでもまぁほとんどの場合は良いのだけれど、最近になって GFM (GitHub Flavored Markdown を使ったテーブルをちょいちょい書く機会が連続してあって、GFM には対応していない markdown コマンドではちょっと物足りなさを感じていた。

GFM 対応のコマンドが無いわけがない、とググってみたら、最初に見つかったのが gh-markdown-cli だったので、インストールしたみたら deprecated だと言われた。

% npm install -g gh-markdown-cli
npm WARN deprecated github-flavored-markdown@1.0.1: This project is long out of date. Use 'marked' instead.
/usr/local/bin/mdown -> /usr/local/lib/node_modules/gh-markdown-cli/bin/mdown
gh-markdown-cli@0.2.0 /usr/local/lib/node_modules/gh-markdown-cli
├── commander@2.3.0
├── github-flavored-markdown@1.0.1
├── wrench@1.5.8
├── minimatch@1.0.0 (sigmund@1.0.0, lru-cache@2.5.0)
└── glob@4.0.5 (once@1.3.0, inherits@2.0.1, graceful-fs@3.0.2)

あ、 npm コマンドを使っているけど、Node.js は別途インストールしてあったので、それをそのまま使っている。

上記の WARN メッセージは「github-flavored-markdown プロジェクトはだいぶ更新されてないんで、代わりに marked を使った方がいいよ」的な内容。

ということで、その marked をインストールしてみた。

% npm install -g marked
/usr/local/bin/marked -> /usr/local/lib/node_modules/marked/bin/marked
marked@0.3.2 /usr/local/lib/node_modules/marked

基本的には「Node.js の Markdown パーサ用モジュール」という立ち位置だと思うんだけど、CLI コマンド marked も付いてくる。そのコマンドが /usr/local/lib/node_modules/marked/bin/marked にインストールされ、PATH が通っているであろう /usr/local/bin/marked へシンボリックリンクが張られた状態になった。

% ls -l /usr/local/bin/marked
lrwxr-xr-x  1 suzuki  admin  37  8 14 23:42 /usr/local/bin/marked@ -> ../lib/node_modules/marked/bin/marked

ちなみに、この markedGitHub にリポジトリがあった

次に markdown-mode の設定をしてやる。

(setq markdown-command "/usr/local/bin/marked")

これで、C-c C-c v (markdown-export-and-preview) を実行した場合に、

  • 編集中の Markdown ファイルを marked コマンドで HTML ファイルへ変換して出力
  • 出力した HTML ファイルをブラウザで表示

という動作になる。

例えば、<table> に変換してくれることを期待して、次のように書いたとする。

| hoge | fuga |
| ---- | ---- |
|  aa  |  bb  |
|  cc  |  dd  |

これまで使っていた markdown コマンドだと、次のように変換されていた。

<p>| hoge | fuga |
| ---- | ---- |
|  aa  |  bb  |
|  cc  |  dd  |</p>

marked コマンドへ変えたことにより、このように変換されるようになった。

<table>
<thead>
<tr>
<th>hoge</th>
<th>fuga</th>
</tr>
</thead>
<tbody>
<tr>
<td>aa</td>
<td>bb</td>
</tr>
<tr>
<td>cc</td>
<td>dd</td>
</tr>
</tbody>
</table>

この日記も GFM スタイルで書いているので、同じテキストを入力するとこうやって <table> を使った表示になってくれる。便利。

hoge fuga
aa bb
cc dd

おまけ

markdown-mode には、gfm-mode も一緒に入っていたのにずっと気づいていなかった。

auto-mode-alist*.md ファイルの編集の場合には、すべからく gfm-mode で編集するようにしてやったわ。

(add-to-list 'auto-mode-alist '("\\.md\\'" . gfm-mode))

よく使ってるものでも(あんまり詳しく調べないで使っていることもあって)知らない機能がたくさんあるなー。