Как программно определить, какая ОС Emacs работает в ELisp?
Я хотел бы запустить другой код в .emacs
в зависимости от ОС.
Как программно определить, какая ОС Emacs работает в ELisp?
Я хотел бы запустить другой код в .emacs
в зависимости от ОС.
Переменная 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.
Для людей, более новых для elisp, пример использования:
(if (eq system-type 'darwin)
; something for OS X if true
; optional something if not
)
Я создал простой макрос, чтобы легко запускать код в зависимости от системного типа:
(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!"))
В .emacs имеется не только переменная system-type
, но и window-system
.
Это полезно, когда вы хотите выбрать один из вариантов только x, или настройку терминала или макроса.
В основном это уже ответили, но для тех, кого это интересует, я просто протестировал это на FreeBSD, и там сообщаемое значение было "berkeley-unix".
Там также (не менее 24/25) system-configuration
, если вы хотите настроить различия в системе сборки.
Теперь есть также подсистема 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")
)