2022-11-13に更新

WSL2のEmacsでorg-modeのリンクをWindows側のEdgeで開く

WSL2に入れたEmacsでorg-modeを使う際、そのままだとorg-mode内のWebサイトへのリンクはWSL2内のlynx(テキストブラウザ)で開こうとする。これを、代わりにWindows側のブラウザで開くように設定したい。その方法を記録しておく。

方法

Windows側のEdgeにWSL側でパスを通す

そもそもWSL側からWindows側のEdgeを起動できないと話にならない。もちろんフルパスを入れれば起動できるのだが、簡単にするためにまずはWSL側のパスが通っている場所にEdgeの実行ファイルへのシンボリックリンクをつくる。

msedge.exeC:\Program Files (x86)\Microsoft\Edge\Application にあるので、以下のようにする。シンボリックリンクを作る場所は /usr/local/bin とする。

sudo ln -s /mnt/c/Program\ Files\ \(x86\)/Microsoft/Edge/Application/msedge.exe /usr/local/bin/msedge

これで、WSL側からWindows側のEdgeを簡単に呼べるようになる。

msedge "yahoo.co.jp"

なお、WSLには wslview というコマンドがあり、これにURLを渡すことでもWindows側のEdgeで開いてくれるのだが、これをEmacsのブラウザに設定した場合は何故か画面が崩れるという問題が発生した。

Emacsの設定

https://www.emacswiki.org/emacs/BrowseUrl を参考に、init.elに設定を書く。org-modeのリンクについては普通のリンク向けのブラウザ設定だけではだめなようなので注意。

(setq browse-url-browser-function 'browse-url-generic
      browse-url-generic-program "msedge")

(defadvice org-open-at-point (around org-open-at-point-choose-browser activate)
  (let ((browse-url-browser-function
        (cond ((equal (ad-get-arg 0) '(4))
                'browse-url-generic)
              ((equal (ad-get-arg 0) '(16))
                'choose-browser)
              (t
                (lambda (url &optional new)
                  (browse-url-generic url t)))
    )))

おまけ:leaf.elの場合

私は leaf.el を使っているので以下のようにした。C-wM-wのときにWindows側のクリップボードにも渡す設定も書いている。

(leaf wsl-settings
  :custom ((browse-url-browser-function . 'browse-url-generic)
           (browse-url-generic-program . "msedge"))
  :config
  ;; org-modeで外部ブラウザでリンクを開くようにする設定
  (defadvice org-open-at-point (around org-open-at-point-choose-browser activate)
    (let ((browse-url-browser-function
           (cond ((equal (ad-get-arg 0) '(4))
                  'browse-url-generic)
                 ((equal (ad-get-arg 0) '(16))
                  'choose-browser)
                 (t
                  (lambda (url &optional new)
                    (browse-url-generic url t)))
                 )))
      ad-do-it))
  (leaf wsl-copy-setting
    :doc "コピーしたものをクリップボードに渡す設定"
    :init
    (defun wsl-copy (start end)
      (interactive "r")
      (shell-command-on-region start end "clip.exe")
      (kill-ring-save start end))
    :bind (("M-w" . wsl-copy)))
    (leaf wsl-cut-setting
    :doc "切り取りしたものをクリップボードに渡す設定"
    :init
    (defun wsl-cut (start end)
      (interactive "r")
      (shell-command-on-region start end "clip.exe")
      (kill-region start end))
    :bind (("C-w" . wsl-cut)))
  )
ツイッターでシェア
みんなに共有、忘れないようにメモ

すずしめ

巫女見習いです。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント