LoginSignup
14
8

WSL2のEmacsからWindows側のブラウザを開く

Posted at

いろいろあって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-variablessetqっぽく使えるsetoptができたので使ってきましょ。

試しかた

WSLgで動かしてるEmacsの適当なバッファでURLっぽい文字列を書いてカーソルを合わせてC-x C-fを押すか、goto-address-modeが有効になっていることを確認してクリックしましょう。

まとめ

WSLは適当にぽちぽちやってるのでも案外使えるのでびっくりしました。

14
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8