elispのオペレーティングシステムを特定する方法


回答:


98

system-type変数:

system-type is a variable defined in `C source code'.
Its value is darwin

Documentation:
Value is symbol indicating type of operating system you are using.
Special values:
  `gnu'         compiled for a GNU Hurd system.
  `gnu/linux'   compiled for a GNU/Linux system.
  `darwin'      compiled for Darwin (GNU-Darwin, Mac OS X, ...).
  `ms-dos'      compiled as an MS-DOS application.
  `windows-nt'  compiled as a native W32 application.
  `cygwin'      compiled using the Cygwin library.
Anything else indicates some sort of Unix system.

83

elispを初めて使用する人のための使用例:

(if (eq system-type 'darwin)
  ; something for OS X if true
  ; optional something if not
)

OK、私はElispの奇妙なブランチブロック(ブロックにprogn必要な改行で区切られているifとelseの部分)で何度か火傷を負ったので、癖に慣れていないすべての人への推奨事項- この回答を確認してください。
metakermit 2013年

1
prognelseケースがない場合、@ kermit666は実際には必要ありません。つまり、のwhen代わりに使用できるということですif。これは、(if ... (progn ...) '())
Electric Coffee

1
「=」を使用しようとしていて機能しなかったため、賛成票を投じました。
フィリップダニエルズ2015

3
@metakermitあなたは使用することができますcondので、のように:(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
ealfonso

という意味caseではありませんcondcase以来、作品system-typeのようなシンボルである'gnu/linuxdarwin、ない文字列
ealfonso

22

システムタイプに応じてコードを簡単に実行するための簡単なマクロを作成しました。

(defmacro with-system (type &rest body)
  "Evaluate BODY if `system-type' equals TYPE."
  (declare (indent defun))
  `(when (eq system-type ',type)
     ,@body))

(with-system gnu/linux
  (message "Free as in Beer")
  (message "Free as in Freedom!"))

11

.emacsには、だけsystem-typeでなくwindow-system変数も含まれます。これは、xのみのオプション、端末、macos設定のいずれかを選択する場合に便利です。


5

現在、Windows用のLinuxサブシステム(Windows 10の場合system-typeはbash)がありgnu/linuxます。このシステムタイプを検出するには、次を使用します。

(if
    (string-match "Microsoft"
         (with-temp-buffer (shell-command "uname -r" t)
                           (goto-char (point-max))
                           (delete-char -1)
                           (buffer-string)))
    (message "Running under Linux subsystem for Windows")
    (message "Not running under Linux subsystem for Windows")
  )


0

system-configurationビルドシステムの違いを調整したい場合は(少なくともバージョン24-26で)もあります。ただし、この変数のドキュメントには、system-type変数のドキュメントのように、変数に含まれる可能性のある値については説明されていません 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.