scoop でインストールした plantuml と plantuml-mode on Emacs でプレビューできない件

  • Windows
  • scoop でインストールした plantuml
  • Emacs の plantuml-mode
    • http://plantuml.com/ のオンライン変換を使うのではなく、以下のような設定でローカルで変換する
  (setq plantuml-executable-path (executable-find "plantuml"))
  (setq plantuml-default-exec-mode 'executable)

というケースで C-c C-c とかすると文字化けバッファが表示される。

Warning: -headless flag must be the first one in the command line

ってなのが最初についててその後ろに画像データがくっついているので、 Emacs が画像とみなさないようだ。

本質的には、 「画像も warning も同じ標準出力に出している」 と思われる plantuml に非があると推測するが、 Emacs の設定からどうコマンドラインオプションを指定しても どうしてもこの warning が消せない。

プレビュー機能を諦めて2ヶ月くらい放置してたんだが、 今日たまたま

(executable-path "plantuml")

とかしてて plantuml.cmd の中身を見てて原因がわかった。 scoop が作る plantuml.cmd は graphviz の dot のパスをコマンドラインオプションで plantuml.jar へ渡すようになってて、 plantuml.cmd に対して指定したコマンドラインオプションは必ずその後ろに付加される書き方になってる。 だから、この問題は plantuml.cmd の外側 ≒ Emacs plantuml-mode の設定 では解決できないんだ。

なので、plantuml.cmd でこう↓なっているのを

@java -jar "D:\Users\mino\scoop\apps\plantuml\1.2020.19\plantuml.jar" -graphvizdot "D:\Users\mino\scoop\shims\dot.exe" %*

こうしてしまえば warning は出なくなる。

@java -jar "D:\Users\mino\scoop\apps\plantuml\1.2020.19\plantuml.jar" %* -graphvizdot "D:\Users\mino\scoop\shims\dot.exe"

ひとまず解決したのは良かったけど、まぁ釈然とはしないなぁ…w

あ、一応この plantuml.cmd を生成してる scoop extras bucket の修正 PR は出しておきました。 個人的には解決しちゃったので、マージされなくてもちっとも困らないんですが、 今後ハマる人が少しでも少なくなれば。