Frage Wie man Betriebssystem in elisp bestimmt?


Wie programmiere ich programmatisch, unter welchem ​​Betriebssystem Emacs in ELisp ausgeführt wird?

Ich würde gerne einen anderen Code einspielen .emacs abhängig vom Betriebssystem.


75
2017-11-30 00:14


Ursprung


Antworten:


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

84
2017-11-30 00:37



Für Leute neuer zu elisp, eine Beispielverwendung:

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

69
2018-06-19 03:23



Ich habe ein einfaches Makro erstellt, um Code abhängig vom Systemtyp einfach auszuführen:

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

18
2017-10-01 08:48



In einem .emacs gibt es nicht nur die system-typeaber auch die window-system Variable. Dies ist nützlich, wenn Sie zwischen einer Option nur x oder einer Terminal- oder MacOS-Einstellung wählen möchten.


8
2017-11-30 23:39



Jetzt gibt es auch Linux Subsystem für Windows (bash unter Windows 10) wo system-type ist gnu/linux. Um diesen Systemtyp zu erkennen, verwenden Sie:

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

3
2017-07-18 19:56



Dies ist meist bereits beantwortet, aber für die Interessenten habe ich dies nur auf FreeBSD getestet und dort war der berichtete Wert "berkeley-unix".


2
2018-05-16 06:03



Es gibt auch (mindestens 24/25) system-configuration, wenn Sie Unterschiede im Build-System anpassen möchten.


0
2018-02-08 16:52