読者です 読者をやめる 読者になる 読者になる

markdown

情報量:小 予想読了時間:10分

 

未だにmarkdownでハマっています。

調べた感じ、世に出ているものではざっと次のようなエンジンが存在するよう

  • Markdown.pl (Perl. cpan install Markdown):元々使っていたエンジン。http://daringfireball.net/projects/markdown/ から入門するパスだと、自動的にこれ一択になる
  • kramdown (Ruby. gem install kramdown):使ってない
  • bluefeather(Ruby.gem install bluefeather):これにした
  • redcarpet (Ruby.gem install redcarpet):いまいち。redmineやGitHubは基本これを使っているらしい。2.2.2が落ちてくる。
  • pandoc (Haskell. cabal install pandoc):使ってない

 

あと、blueclothというのもあるが、いわばbluefeatherのサブセットのよう。

違いは、PHP Markdown Extraを採用しているかどうか。

かなり長い文章でも使いたかったので、TOC(Table of Contents(目次みたいなアレ))の自動挿入記法が欲しかった。

 

 ちなみに、Tocを挿入するには 挿入したい場所に{toc:h1-h3} とか書いといてやると、<h1>〜<h3>とかがまとめてToCとして自動挿入されるので超便利

ここを参考にさせてもらった。多少前提知識は必要だけどシンプルにまとまっていて、読みやすい。20分もあれば読み下せると思う

 

小技としては、{toc:h1-h3}のあたりに

<a name="TOC">TOC</a>

なんてタグを埋め込んで、切りのいいところに[TOC](#TOC)なんて書いておけば、読み終わったとこから一気にTOCまで巻き戻せて、拾い読みのときに読みやすいのでオススメ。

 

おもにemacsでしか使っていないので、vi系、その他については他を参照してもらいたい。

ただ、世の中に存在するMarkdownエディタは、適当にHTML出力して、付属のレンダラでごまかしてる系(レンダリングで直にmarkdown記法を解釈してる)があまりに多いので、資料としてちゃんとHTMLで取っておきたい人には勧めない。

 

で、emacsだけど。。。

残念ながらmarkdown-mode.elではC-c C-c {v|m|...}系列では、使えない模様

どうも、bluefeatherの実行速度に起因するものかなぁと。markdown-mode.elはmarkdownエンジンが十分速やかに処理が終わるものという前提条件をたてている気がする。(特にコマンド投げてから、ブラウザが立ち上がるまでの速度が半端ない)

 

あまりelispに詳しい方ではないが、markdown-mode.elはcall-processでmarkdown-commandを呼び出しているのでその辺りを書き換えてみたが、(l.2461あたり) どうもうまく行かない。

少なくとも、init.elで
(defun markdown-custom ()
  (interactive)
   "markdown-mode-hook"
      (setq markdown-command "bluefeather --force"))
      (add-hook 'markdown-mode-hook '(lambda() (markdown-custom)))      

とかしただけではだめだった。

さんざんggったが、答えは得られず。。。ついにStackOverflowのお世話になる日が来たか!とも思ったけど、冷静に考えるとレンダリングの確認がしたいなら、M-x shellやら、terminalで
bluefeather --force hoge.md
とかして、事前に開いておいたfirefoxを⌘-r すれば済む話なので、一晩悩んであきらめた。

 

M-x shellでするならば、次の設定をinit.elにしのばせておく

(dolist (dir (list
"/sbin"
"/usr/sbin"
"/bin"
"/usr/bin"
"/opt/local/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))))

emacsでちょっとでも楽したい人はbluefeather --forceを適当な名前でdefunしておくといいかも。M-x markdown-commandでいける気がするけど試してはいない。

terminalでコマンド打つなら.bashrc で適当に。。。

macはこれでmarkdown環境が整った。Windowsは気が向いたらそのうち・・・