Antworten:
Die system-type
Variable:
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.
Für Leute, die neu in Elisp sind, eine Beispielverwendung:
(if (eq system-type 'darwin)
; something for OS X if true
; optional something if not
)
progn
notwendig für Blöcke), also eine Empfehlung an alle, die mit den Macken nicht vertraut sind - lesen Sie diese Antwort .
progn
nicht benötigt, wenn Sie keinen anderen Fall haben. Was ich damit meine ist, dass Sie nur when
anstelle von verwenden können if
, was gleichbedeutend ist mit(if ... (progn ...) '())
cond
wie folgt verwenden :(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
case
nicht cond
. case
funktioniert da system-type
ist ein Symbol wie 'gnu/linux
oder darwin
, kein String
Ich habe ein einfaches Makro erstellt, um Code je nach Systemtyp einfach auszuführen:
(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!"))
Jetzt gibt es auch Linux Subsystem für Windows (Bash unter Windows 10), wo system-type
ist gnu/linux
. Um diesen Systemtyp zu erkennen, verwenden Sie:
(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")
)
Dies ist meistens bereits beantwortet, aber für Interessierte habe ich dies gerade auf FreeBSD getestet und dort war der gemeldete Wert "berkeley-unix".
Es gibt auch (zumindest in den Versionen 24-26) system-configuration
, wenn Sie Unterschiede im Build-System berücksichtigen möchten. In der Dokumentation dieser Variablen werden jedoch nicht die möglichen Werte beschrieben, die sie enthalten kann, wie dies in der Dokumentation der system-type
Variablen der Fall ist.