109 votes

Comment déterminer le système d'exploitation en elisp ?

Comment déterminer de manière programmatique sous quel système d'exploitation Emacs fonctionne dans ELisp ?

Je voudrais exécuter un code différent dans .emacs selon le système d'exploitation.

1 votes

Extrait du manuel de référence de GNU Emacs Lisp gnu.org/software/emacs/manual/html_node/elisp/

112voto

scottfrazer Points 11035

El 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.

97voto

Endrju Points 321

Pour les personnes qui ne connaissent pas elisp, un exemple d'utilisation :

(if (eq system-type 'darwin)
  ; something for OS X if true
  ; optional something if not
)

2 votes

OK, je me suis brûlé plusieurs fois avec des blocs de branchements bizarres en Elisp (partie if- et else séparée par une nouvelle ligne, progn nécessaire pour les blocs), donc une recommandation à tous ceux qui ne sont pas familiers avec les bizarreries - vérifiez les points suivants cette réponse dehors.

3 votes

@kermit666 en fait progn n'est 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 when au lieu de if ce qui est équivalent à (if ... (progn ...) '())

1 votes

Upvoted parce que j'essayais d'utiliser "=" et ça ne marchait pas.

27voto

Gerstmann Points 1830

J'ai créé une macro simple pour exécuter facilement le 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!"))

11voto

Eric Points 3491

Dans un .emacs, il n'y a pas seulement l'élément system-type mais aussi le window-system variable. C'est utile lorsque vous voulez choisir entre une option x uniquement, ou un paramètre terminal, ou macos.

7voto

Konrad Eisele Points 1018

Maintenant, il existe également un sous-système Linux pour Windows (bash sous Windows 10) où system-type est 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")
  )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X