Antworten:
Die system-typeVariable:
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
)
prognnotwendig für Blöcke), also eine Empfehlung an alle, die mit den Macken nicht vertraut sind - lesen Sie diese Antwort .
prognnicht benötigt, wenn Sie keinen anderen Fall haben. Was ich damit meine ist, dass Sie nur whenanstelle von verwenden können if, was gleichbedeutend ist mit(if ... (progn ...) '())
condwie folgt verwenden :(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
casenicht cond. casefunktioniert da system-typeist ein Symbol wie 'gnu/linuxoder 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-typeist 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-typeVariablen der Fall ist.