LoginSignup
1

More than 5 years have passed since last update.

EmacsでWSLを使っている/いないを判断する

Last updated at Posted at 2019-03-20

WSLを使っている時に行いたい処理がある時はどうしようか。
system-typeの値はgnu/linux。これはWindowsサブシステムではないLinuxと同じなので、プラス何かの情報がほしいです。

外部コマンドを使う

uname -runame -vにはWSL固有らしい文字列が含まれているので、それを参考にします。

$ uname -r
4.4.0-17763-Microsoft
$ uname -v
#379-Microsoft Wed Mar 06 19:16:00 PST 2019

unameの出力にMicrosoftが含まれていればWSLだとすると、こんな感じか。

(when (and (eq system-type 'gnu/linux)
           (string-match-p "Microsoft" (shell-command-to-string "uname -v")))
  (do-something))

この先ずっとカーネルバージョンにMicrosoftが含まれているとは限らないのが悩ましいところです。数カ月先、数年先に落とし穴が待ってそう……

環境変数を探す

Windows 10はビルド17063以降WSLENVという環境変数を提供しています。1
WSLENVはWindowsとWSLの間でファイルパスのようなシステム固有のデータを橋渡しする役目がある環境変数だそうで。これがあればWSLの環境下にあると言えそうです。

(when (and (eq system-type 'gnu/linux)
           (getenv "WSLENV"))
  (do-something))

外部コマンドを使う場合と同様、WSLENVがずっと使える保証がないところは泣き所です。
とはいえ、カーネルバージョンの文言よりは後方互換性を期待できるので、使うとしたらこちらかなーと考えています。

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
1