最近いろいろあって markdown で文章書きまくってるので、やはりプレビュー環境を快適にしたいと思ったわけです。 となると、例えば Guard を使ってファイル変更を検知して Marpet で Markdown → HTML にしたり、 その時にブラウザリロードがめんどくさかったら Mozrepl でほげっちゃったりすると思うのです。
せっかくなのでなんか面白い手法ないかなって考えたところ、 先月の 関西Emacs勉強会 で @syohex さんが発表していた内容を思い出しました。
第六回 関西 Emacs勉強会に参加してきました。 - Life is very short
最近ナウいと評判?の websocket に興味もあったので、emacs-realtime-markdown-viewer を使ってみました。 いい感じに動いてたんですが、ところどころ謎挙動だったり少し変更したいところもあったので fork 致しました。
gongo / emacs-realtime-markdown-viewer
主な変更点は以下
kill-buffer-hook をバッファローカルに
- 気づいたら websocket が close されてることがあって、それが謎の tmp バッファが削除された時に引きづられてたからっぽい
バッファ毎に websocket connection を確保するようにした
websocket-close
すると他の websocket connection も全て close されるという謎挙動あったんだけど、これは-
websocket-open
のmake-network-process
で全てのプロセスが同じバッファ名で作られてた -
websocket-close
で kill-buffer → 全員死亡
という感じだったので、それぞれの connection でバッファ名変更するようにした
-
- websocket connection が全て close された時に webapp が stop するようにした
という感じで変更した結果のデモが以下です。
emacs-realtime-markdown-viewer test from gongo on Vimeo.
- [〜 0:50] 従来どおり
- [〜 1:35] 別バッファでも realtime-markdown-viewer-mode を起動したら、そのバッファが表示される。切り替えも OK
- [〜 1:50] あるバッファで disable にしても、もう片方は生きてますアピール
- [〜 最後] 全ての websocket が close されたら、webapp も死んでますよアピール
デモでは画面半分をブラウザで表示していますが、 実際に使ってる時は目の前にアームで設置されてる iPad の Safari でブラウジングしています。思ったよりも快適。
websocket に手を出すのかなり出遅れてる感はあるけど、これからですね!