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.
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.
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.
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.
@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 ...) '())
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!"))
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 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.
1 votes
Extrait du manuel de référence de GNU Emacs Lisp gnu.org/software/emacs/manual/html_node/elisp/