いろいろあってWindows上にメインの開発環境を構築しています。とはいってもだいたいのものはWSLで動くので楽なものです。ターミナルは最初から入っているWindows Terminalが十分な機能を持っていますし。
Windowsを起動するといきなり全画面のターミナルでDebian GNU/Linuxのシェルが起動しているというのは、なかなかに壮観で20年ほど前のことを思い返すとまさに隔世の感がありますね。GUIのEmacsすら深いことは考えずともGTK付きでビルドすればWSLgで動いてしまいました。
小さな問題はいくつもありましたが、だいたいのことはごにょごにょすれば解決できます。今回Emacsの環境を構築するまでしばらく気にも留めていなかったことですが、GUIのEmacsを使っていてURLをブラウザで開く機会は思いのほか多くありました。
Emacsはこういう場面でもカスタマイズできるようにできています。
ステップ1
いま自分がWSL2の中に居ることを知ります。
(defconst my-system-is-wsl2
(eval-when-compile
(getenv "WSL_DISTRO_NAME")))
変数名は自分の好きなように、というか変数にしなくてもいいです。好みで。
ステップ2
URLブラウズ関数を書きます。なんかぐぐったらWindowsのstart
コマンドをいうやつに渡してやればいいらしい。
(defun my-browse-url-wsl-host-browser (url &rest _args)
"Browse URL with WSL host web browser."
(prog1 (message "Open %s" url)
(shell-command-to-string
(mapconcat #'shell-quote-argument
(list "cmd.exe" "/c" "start" url)
" "))))
ステップ3
WSLだったらブラウザ関数を上記のものに設定します。
(when (eval-when-compile my-system-is-wsl2)
(setopt browse-url-browser-function #'my-browse-url-wsl-host-browser))
Emacs29ではcustom-set-variables
のsetq
っぽく使えるsetopt
ができたので使ってきましょ。
試しかた
WSLgで動かしてるEmacsの適当なバッファでURLっぽい文字列を書いてカーソルを合わせてC-x C-f
を押すか、goto-address-mode
が有効になっていることを確認してクリックしましょう。
まとめ
WSLは適当にぽちぽちやってるのでも案外使えるのでびっくりしました。