Domanda

Come posso determinare a livello di codice quale sistema operativo Emacs è in esecuzione in ELisp?

Vorrei eseguire codice diverso in .emacs a seconda del sistema operativo.

È stato utile?

Soluzione

La variabile tipo di sistema :

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.

Altri suggerimenti

Per le persone più recenti a elisp, un esempio di utilizzo:

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

Ho creato una semplice macro per eseguire facilmente il codice a seconda del tipo di sistema:

(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 un .emacs non esiste solo la tipo di sistema , ma anche la variabile sistema di finestre . Ciò è utile quando si desidera scegliere tra alcune opzioni solo x, o un'impostazione terminale o macos.

Ora esiste anche un sottosistema Linux per Windows (bash in Windows 10) dove tipo di sistema è gnu / linux . Per rilevare questo tipo di sistema utilizzare:

(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")
  )

Questa è per lo più già risposta, ma per gli interessati, ho appena provato questo su FreeBSD e lì il valore riportato era "berkeley-unix".

C'è anche (almeno nel 24/25) configurazione del sistema , se vuoi aggiustare le differenze nel sistema di compilazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top