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- и else-части, разделенные новой строкой, prognнеобходимой для блоков), поэтому рекомендация всем, кто не знаком с причудами - проверьте этот ответ .
метакермит 08
1
@ kermit666 на самом деле prognне нужен, если у вас нет другого случая. Я имею в виду, что вы можете просто использовать whenвместо if, что эквивалентно(if ... (progn ...) '())
Electric Coffee
1
Проголосовали за, потому что я пытался использовать знак "=", но он не работал.
Филип Дэниэлс
3
@metakermit можно использовать condтак:(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
ealfonso
Я имел в виду case, что нет cond. caseработает, так system-typeкак это символ вроде 'gnu/linuxили darwin, а не строка
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!"))
В .emacs есть не только переменная system-type, но и window-systemпеременная. Это полезно, когда вы хотите выбрать между опцией только x, терминалом или настройкой macos.
Теперь есть также подсистема 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")
)
На этот вопрос в основном уже ответили, но для тех, кто заинтересован, я только что протестировал это на FreeBSD, и там было указано значение «berkeley-unix».
Также есть (по крайней мере system-configuration, в версиях 24-26) , если вы хотите отрегулировать различия в системе сборки. Однако в документации по этой переменной не описаны возможные значения, которые она может содержать, как в документации по system-typeпеременной.
Ответы:
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 )
источник
progn
необходимой для блоков), поэтому рекомендация всем, кто не знаком с причудами - проверьте этот ответ .progn
не нужен, если у вас нет другого случая. Я имею в виду, что вы можете просто использоватьwhen
вместоif
, что эквивалентно(if ... (progn ...) '())
cond
так:(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
case
, что нетcond
.case
работает, такsystem-type
как это символ вроде'gnu/linux
илиdarwin
, а не строкаЯ создал простой макрос, чтобы легко запускать код в зависимости от типа системы:
(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, терминалом или настройкой macos.источник
Теперь есть также подсистема 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") )
источник
На этот вопрос в основном уже ответили, но для тех, кто заинтересован, я только что протестировал это на FreeBSD, и там было указано значение «berkeley-unix».
источник
Также есть (по крайней мере
system-configuration
, в версиях 24-26) , если вы хотите отрегулировать различия в системе сборки. Однако в документации по этой переменной не описаны возможные значения, которые она может содержать, как в документации поsystem-type
переменной.источник