Как определить операционную систему в elisp? - PullRequest
81 голосов
/ 30 ноября 2009

Как программно определить, под какой ОС Emacs работает в ELisp?

Я хотел бы запустить другой код в .emacs в зависимости от ОС.

Ответы [ 7 ]

90 голосов
/ 30 ноября 2009

Переменная 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.
74 голосов
/ 19 июня 2010

Для людей новичков в elisp, пример использования:

(if (eq system-type 'darwin)
  ; something for OS X if true
  ; optional something if not
)
21 голосов
/ 01 октября 2014

Я создал простой макрос для простого запуска кода в зависимости от типа системы:

(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!"))
10 голосов
/ 01 декабря 2009

В .emacs есть не только system-type, но и переменная window-system. Это полезно, когда вы хотите выбрать между какой-либо опцией «только х», или терминалом, или настройкой «macos».

3 голосов
/ 18 июля 2017

Теперь есть также подсистема Linux для Windows (bash под Windows 10), где system-type равно 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")
  )
2 голосов
/ 16 мая 2013

В основном это уже ответ, но для тех, кто заинтересован, я только что проверил это на FreeBSD, и там сообщалось значение "berkeley-unix".

0 голосов
/ 08 февраля 2017

Также есть (по крайней мере 24/25) system-configuration, если вы хотите скорректировать различия в системе сборки.

...