EmacsでGithub Flavored Markdown

githubでは、当然のことながらはてな記法が使えないので、markdownでも使うか、ということでEmacsでmarkdownをウハウハするメモです。

環境

  • Mac OS X (Lion)
  • Cocoa Emacs (23.4)
  • el-get (3.stableではなくmasterブランチ)

Emacsにmarkdown-modeを入れる

markdown-mode.elは(Emacs Markdown Mode)からダウンロード可能です*1。このmarkdown-mode、なかなか最強です。

が、"C-c C-c m"などのプレビュー系のコマンドが

/bin/bash: markdown: command not found

というエラーが出て須らく失敗してしまいました。

原因は以下の2点でした。

  1. markdown実行ファイルが未インストール
  2. markdownのパスが解決できない

まず、markdownの変換プログラムが必要です。ちゃんとしたプレビューをしたいのであれば、何らかのGithub Flavored Markdown(GFM)処理系を入れる必要があります。RubyであればRedcarpet*2、Node.jsであればgh-markdown-cliを入れれば良さそうです。今回はgh-markdown-cliをインストールしました。

$ sudo npm install gh-markdown-cli -g

GFMでなくて良いのであれば、公式を使うなり、HomebrewでインストールするなりすればOKです。

次に、パスですが、何故か私の環境ではフルパスを指定しないと解決できませんでした。というのも、Shellでは/usr/local/binにパスが通っているのですが、Emacsでは通っていなかったようです。
Emacsでrbenvを使う環境変数PATHで手間取ったのでメモ | びーおーぷんどっとねっと
の通り、ザクっとパスを追加しておきます。

(dolist (dir (list
              "/sbin"
              "/usr/sbin"
              "/bin"
              "/usr/bin"
              "/opt/local/bin"
              "/sw/bin"
              "/usr/local/bin"
              (expand-file-name "~/bin")
              (expand-file-name "~/.emacs.d/bin")
              ))
 (when (and (file-exists-p dir) (not (member dir exec-path)))
   (setenv "PATH" (concat dir ":" (getenv "PATH")))
   (setq exec-path (append (list dir) exec-path))))
   
;; markdown-mode
(add-hook
 'markdown-mode-hook
 '(lambda()
    (setq markdown-command "mdown")))

markdown-commandにパーサをセットすると、それが変換時に使われるようになるようです。ソースコードが色付けされませんが、プレビューする分には上記で十分でしょう。

公式サイトにも書いてありますが、SmartyPantsを使いたいのであれば、パイプで渡せばOKです。

*1:私はel-getを使っているので適当にインストール

*2:[https://github.com/tanoku/redcarpet/:title=githubのRedcarpetのリポジトリ]が消えているため、どこで保守しているのか謎です…が、gem使えばインストールできそうです。