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, je me suis brûlé plusieurs fois avec des blocs de branches étranges dans Elisp (si et autre partie séparés par une nouvelle ligne, prognnécessaire pour les blocs), donc une recommandation à tous ceux qui ne sont pas familiers avec les bizarreries - vérifiez cette réponse .
metakermit
1
@ kermit666 prognn'est en fait pas nécessaire si vous n'avez pas d'autre cas. Ce que je veux dire par là, c'est que vous pouvez simplement utiliser à la whenplace de if, ce qui équivaut à(if ... (progn ...) '())
Café électrique
1
J'ai voté pour parce que j'essayais d'utiliser "=" et cela ne fonctionnait pas
Je voulais casedire non cond. casefonctionne depuis system-typeest un symbole comme 'gnu/linuxou darwin, pas une chaîne
ealfonso
22
J'ai créé une macro simple pour exécuter facilement du code en fonction du type de système:
(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!"))
Dans un .emacs, il n'y a pas seulement la system-type, mais aussi la window-systemvariable. Ceci est utile lorsque vous souhaitez choisir entre une option x uniquement, un terminal ou un paramètre macos.
Maintenant, il existe également un sous-système Linux pour Windows (bash sous Windows 10) où se system-typetrouve gnu/linux. Pour détecter ce type de système, utilisez:
(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"))
C'est la plupart du temps déjà répondu, mais pour ceux qui sont intéressés, je viens de tester ceci sur FreeBSD et là la valeur rapportée était "berkeley-unix".
Il y a aussi (au moins dans les versions 24-26) system-configuration, si vous souhaitez ajuster les différences dans le système de construction. Cependant, la documentation de cette variable ne décrit pas les valeurs possibles qu'elle peut contenir comme la documentation de la system-typevariable.
Réponses:
La
system-type
variable:la source
Pour les personnes plus récentes sur elisp, un exemple d'utilisation:
la source
progn
nécessaire pour les blocs), donc une recommandation à tous ceux qui ne sont pas familiers avec les bizarreries - vérifiez cette réponse .progn
n'est en fait pas nécessaire si vous n'avez pas d'autre cas. Ce que je veux dire par là, c'est que vous pouvez simplement utiliser à lawhen
place deif
, ce qui équivaut à(if ... (progn ...) '())
cond
comme ceci:(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
case
dire noncond
.case
fonctionne depuissystem-type
est un symbole comme'gnu/linux
oudarwin
, pas une chaîneJ'ai créé une macro simple pour exécuter facilement du code en fonction du type de système:
la source
Dans un .emacs, il n'y a pas seulement la
system-type
, mais aussi lawindow-system
variable. Ceci est utile lorsque vous souhaitez choisir entre une option x uniquement, un terminal ou un paramètre macos.la source
Maintenant, il existe également un sous-système Linux pour Windows (bash sous Windows 10) où se
system-type
trouvegnu/linux
. Pour détecter ce type de système, utilisez:la source
C'est la plupart du temps déjà répondu, mais pour ceux qui sont intéressés, je viens de tester ceci sur FreeBSD et là la valeur rapportée était "berkeley-unix".
la source
Il y a aussi (au moins dans les versions 24-26)
system-configuration
, si vous souhaitez ajuster les différences dans le système de construction. Cependant, la documentation de cette variable ne décrit pas les valeurs possibles qu'elle peut contenir comme la documentation de lasystem-type
variable.la source