web-dev-qa-db-fra.com

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

Comment déterminer par programme sous quel système d'exploitation Emacs s'exécute dans ELisp?

Je voudrais exécuter un code différent dans .emacs selon l'OS.

84
ljs

Le 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.
94
scottfrazer

Pour les personnes plus récentes à elisp, un exemple d'utilisation:

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

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!"))
22
Gerstmann

Dans un .emacs, il n'y a pas seulement le system-type, mais aussi le window-system variable. Ceci est utile lorsque vous souhaitez choisir entre une option x uniquement, ou un paramètre de terminal ou de macros.

11
Eric

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")
  )
5
Konrad Eisele

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

2

Il y a aussi (en 24/25 au moins) system-configuration, si vous souhaitez ajuster les différences dans le système de génération.

0
Jürgen A. Erhard