emacsでmarkdownをプレビューする

markdownをemacsで書いていてプレビューする時、markdown-modeのプレビュー機能を使っていたのですが、これだといちいちブラウザが立ち上がってちょっと面倒に感じていました。せっかくemacsを使っているのだから、emacsの中でプレビューしたいと思いました。少し調べてやってみると、意外と簡単に出来てしまったので、やり方を纏めておきます。

w3m

w3m をインストールする。

sudo apt-get install w3c

emacs-w3mのインストール

emacs上でw3mを動かすために、emacs-w3m をインストールする。

list-packagesでw3mをインストールする。

grip

markdownをHTMLに変換するためのツールとして、grip を使う。 gripはpythonで書かれていて、インストールするには pip が必要となる。

pipのインストール

python3でgripを動かすには、python3のpipをインストールする必要がある。

sudo apt-get isntall python3-pip

gripのインストール

pip3でgripをインストールする。

sudo pip3 install grip

~/.emacs/init.elを編集

~/.emacs/init.el に、emacs-w3mの設定、markdown-modeの設定を追記する。

emacs-w3m

;;
;; w3m
;;
(require 'w3m)
    (defun w3m-browse-url-other-window (url &optional newwin)
        (let ((w3m-pop-up-windows t))
        (if (one-window-p) (split-window))
        (other-window 1)
        (w3m-browse-url url newwin)))

markdown-mode

;;
;; markdown-mode
;;
(require 'markdown-mode)
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))

(defun markdown-render-w3m (n)
    (interactive "p")
    (message (buffer-file-name))
    (call-process "/usr/local/bin/grip" nil nil nil
        "--export"
        (buffer-file-name)
        "/tmp/grip.html")
    (w3m-browse-url-other-window "file://tmp/grip.html"))

(define-key markdown-mode-map "\C-c\C-p" 'markdown-render-w3m)

ここまでの設定により、markdown-modeでmarkdownファイル編集中に、C-c C-p すると、 gripが起動してmarkdownをHTMLに変換、別フレームにw3mでHTMLを表示する、という仕組みが出来上がります。