Thanks Driven Life

日々是感謝

emacs-realtime-markdown-viewer を少し弄ってみた

最近いろいろあって markdown で文章書きまくってるので、やはりプレビュー環境を快適にしたいと思ったわけです。 となると、例えば Guard を使ってファイル変更を検知して Marpet で Markdown → HTML にしたり、 その時にブラウザリロードがめんどくさかったら Mozrepl でほげっちゃったりすると思うのです。

せっかくなのでなんか面白い手法ないかなって考えたところ、 先月の 関西Emacs勉強会 で @ さんが発表していた内容を思い出しました。

第六回 関西 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 されるという謎挙動あったんだけど、これは

      1. websocket-openmake-network-process で全てのプロセスが同じバッファ名で作られてた
      2. 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 も死んでますよアピール

デモでは画面半分をブラウザで表示していますが、 実際に使ってる時は目の前にアームで設置されてる iPadSafari でブラウジングしています。思ったよりも快適。

websocket に手を出すのかなり出遅れてる感はあるけど、これからですね!