web-dev-qa-db-ja.com

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

ELispで実行されているOS Emacsをプログラムで判別するにはどうすればよいですか?

OSに応じて.emacsで異なるコードを実行したいと思います。

84
ljs

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.
94
scottfrazer

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

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

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

(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!"))
22
Gerstmann

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

11
Eric

現在、Windows用のLinuxサブシステム(Windows 10ではbash)もあり、ここでsystem-typegnu/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")
  )
5
Konrad Eisele

これはほとんど既に回答されていますが、興味のある方はFreeBSDでテストしたところ、報告された値は「berkeley-unix」でした。

2

また、(少なくとも24/25)system-configuration、ビルドシステムの違いを調整する場合。

0