Pertanyaan Bagaimana cara menentukan sistem operasi di elisp?


Bagaimana saya menentukan program yang OS Emacs berjalan di bawah di ELisp?

Saya ingin menjalankan kode yang berbeda .emacs tergantung pada OS.


75
2017-11-30 00:14


asal


Jawaban:


Itu system-type variabel:

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



Untuk orang yang lebih baru menggunakan elisp, gunakan contoh:

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

69
2018-06-19 03:23



Saya membuat makro sederhana untuk menjalankan kode dengan mudah tergantung pada jenis sistem:

(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



Dalam .emacs, tidak hanya ada system-type, tetapi juga window-system variabel. Ini berguna ketika Anda ingin memilih antara beberapa opsi x saja, atau terminal, atau pengaturan macos.


8
2017-11-30 23:39



Sekarang ada juga Linux Subsystem untuk Windows (bash di bawah Windows 10) di mana system-type aku s gnu/linux. Untuk mendeteksi jenis sistem ini gunakan:

(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



Ini sebagian besar sudah dijawab, tetapi bagi mereka yang tertarik, saya hanya menguji ini di FreeBSD dan di sana nilai yang dilaporkan adalah "berkeley-unix".


2
2018-05-16 06:03



Ada juga (setidaknya 24/25) system-configuration, jika Anda ingin menyesuaikan perbedaan dalam membangun sistem.


0
2018-02-08 16:52