Ellisp'de işletim sistemi nasıl belirlenir?


Yanıtlar:


99

system-typedeğişken:

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.

83

Daha yeni olan kişiler için örnek bir kullanım:

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

Tamam, Elisp'te tuhaf dal blokları ile kendimi birkaç kez yaktım (eğer ve başka kısımlar bir satırsonu ile ayrılmış, prognbloklar için gerekli), bu yüzden tuhaflıklara aşina olmayan herkese bir öneri - bu yanıtı kontrol edin .
metakermit

1
@ kermit666 prognbaşka bir vakanız yoksa aslında gerekli değildir. Bununla demek istediğim, whenbunun yerine kullanabilirsiniz if, ki bu da eşdeğerdir(if ... (progn ...) '())
Electric Coffee

1
"=" Kullanmaya çalıştığım ve çalışmadığı için olumlu oy verildi.
Philip Daniels

3
@metakermit şu şekilde kullanabilirsiniz cond:(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
ealfonso

Ben demek caseistemedim cond. caseçünkü dizge system-typegibi bir sembol 'gnu/linuxya da darwindeğil
ealfonso

22

Sistem türüne bağlı olarak kodu kolayca çalıştırmak için basit bir makro oluşturdum:

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

11

Bir .emac dosyasında, yalnızca bir değil system-type, aynı zamanda window-systemdeğişken de vardır. Bu, yalnızca bazı x seçeneği veya bir terminal veya macos ayarı arasında seçim yapmak istediğinizde kullanışlıdır.


5

Şimdi Windows için Linux Alt Sistemi (Windows 10 altında bash) system-typevar gnu/linux. Bu sistem türünü tespit etmek için şunu kullanın:

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

2

Bu çoğunlukla yanıtlanmıştır, ancak ilgilenenler için bunu FreeBSD'de test ettim ve orada rapor edilen değer "berkeley-unix" idi.


0

Ayrıca system-configuration, derleme sistemindeki farklılıkları ayarlamak istiyorsanız (en az 24-26 sürümlerinde) vardır . Ancak, bu değişkenin dokümantasyonu, system-typedeğişkenin dokümantasyonunda olduğu gibi içerebileceği olası değerleri açıklamaz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.