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.
OK, ich habe mich mehrmals mit seltsamen Verzweigungsblöcken in Elisp verbrannt (if- und else-Teil durch eine neue Zeile getrennt, prognnotwendig für Blöcke), also eine Empfehlung an alle, die mit den Macken nicht vertraut sind - lesen Sie diese Antwort .
Metakermit
1
@ kermit666 wird eigentlich 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 ...) '())
Electric Coffee
1
Upvoted, weil ich versucht habe, "=" zu verwenden und es nicht funktioniert hat.
Philip Daniels
3
@metakermit können Sie condwie folgt verwenden :(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
ealfonso
Ich meinte casenicht cond. casefunktioniert da system-typeist ein Symbol wie 'gnu/linuxoder darwin, kein String
ealfonso
22
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!"))
In einem .emacs gibt es nicht nur die system-type, sondern auch die window-systemVariable. Dies ist nützlich, wenn Sie zwischen einer Option nur x oder einer Terminal- oder Macos-Einstellung wählen möchten.
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.
Antworten:
Die
system-type
Variable:quelle
Für Leute, die neu in Elisp sind, eine Beispielverwendung:
quelle
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 nurwhen
anstelle von verwenden könnenif
, was gleichbedeutend ist mit(if ... (progn ...) '())
cond
wie folgt verwenden :(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
case
nichtcond
.case
funktioniert dasystem-type
ist ein Symbol wie'gnu/linux
oderdarwin
, kein StringIch habe ein einfaches Makro erstellt, um Code je nach Systemtyp einfach auszuführen:
quelle
In einem .emacs gibt es nicht nur die
system-type
, sondern auch diewindow-system
Variable. Dies ist nützlich, wenn Sie zwischen einer Option nur x oder einer Terminal- oder Macos-Einstellung wählen möchten.quelle
Jetzt gibt es auch Linux Subsystem für Windows (Bash unter Windows 10), wo
system-type
istgnu/linux
. Um diesen Systemtyp zu erkennen, verwenden Sie:quelle
Dies ist meistens bereits beantwortet, aber für Interessierte habe ich dies gerade auf FreeBSD getestet und dort war der gemeldete Wert "berkeley-unix".
quelle
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 dersystem-type
Variablen der Fall ist.quelle