EmacsでWSLを使っている/いないを判断する
WSLを使っている時に行いたい処理がある時はどうしようか。
system-type
の値はgnu/linux
。これはWindowsサブシステムではないLinuxと同じなので、プラス何かの情報がほしいです。
外部コマンドを使う
uname -r
やuname -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
がずっと使える保証がないところは泣き所です。
とはいえ、カーネルバージョンの文言よりは後方互換性を期待できるので、使うとしたらこちらかなーと考えています。
Author And Source
この問題について(EmacsでWSLを使っている/いないを判断する), 我々は、より多くの情報をここで見つけました https://qiita.com/miy4/items/acf50a9c0a053b878b56著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .