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.
Oke, saya membakar diri saya sendiri beberapa kali dengan blok cabang aneh di Elisp (jika- dan bagian lain dipisahkan oleh baris baru, progndiperlukan untuk blok), jadi rekomendasi untuk semua orang yang tidak terbiasa dengan kebiasaan - lihat jawaban ini .
metakermit
1
@ kermit666 sebenarnya progntidak diperlukan jika Anda tidak memiliki kasus lain. Yang saya maksud dengan itu adalah Anda bisa menggunakan whensaja if, yang setara dengan(if ... (progn ...) '())
Electric Coffee
1
Suara positif karena saya mencoba menggunakan "=" dan tidak berhasil.
Philip Daniels
3
@metakermit Anda dapat menggunakan condseperti ini:(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
ealfonso
Maksudku case, tidak cond. caseberfungsi karena system-typemerupakan simbol seperti 'gnu/linuxatau darwin, bukan string
ealfonso
22
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!"))
Dalam .emacs, tidak hanya ada system-type, tetapi juga window-systemvariabelnya. Ini berguna ketika Anda ingin memilih di antara beberapa opsi hanya x, atau terminal, atau pengaturan macOS.
Sekarang ada juga Linux Subsystem untuk Windows (bash di bawah Windows 10) di mana system-typeadalah gnu/linux. Untuk mendeteksi penggunaan jenis sistem ini:
(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")
)
Ini sebagian besar sudah dijawab, tetapi bagi mereka yang tertarik, saya baru saja menguji ini di FreeBSD dan di sana nilai yang dilaporkan adalah "berkeley-unix".
Ada juga (setidaknya dalam versi 24-26) system-configuration, jika Anda ingin menyesuaikan perbedaan dalam sistem build. Namun, dokumentasi variabel ini tidak menjelaskan kemungkinan valas yang mungkin dikandungnya seperti dokumentasi system-typevariabel tersebut.
Jawaban:
The
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.
sumber
Untuk orang-orang yang baru mengenal elisp, contoh penggunaan:
(if (eq system-type 'darwin) ; something for OS X if true ; optional something if not )
sumber
progn
diperlukan untuk blok), jadi rekomendasi untuk semua orang yang tidak terbiasa dengan kebiasaan - lihat jawaban ini .progn
tidak diperlukan jika Anda tidak memiliki kasus lain. Yang saya maksud dengan itu adalah Anda bisa menggunakanwhen
sajaif
, yang setara dengan(if ... (progn ...) '())
cond
seperti ini:(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
case
, tidakcond
.case
berfungsi karenasystem-type
merupakan simbol seperti'gnu/linux
ataudarwin
, bukan stringSaya 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!"))
sumber
Dalam .emacs, tidak hanya ada
system-type
, tetapi jugawindow-system
variabelnya. Ini berguna ketika Anda ingin memilih di antara beberapa opsi hanya x, atau terminal, atau pengaturan macOS.sumber
Sekarang ada juga Linux Subsystem untuk Windows (bash di bawah Windows 10) di mana
system-type
adalahgnu/linux
. Untuk mendeteksi penggunaan jenis sistem ini:(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") )
sumber
Ini sebagian besar sudah dijawab, tetapi bagi mereka yang tertarik, saya baru saja menguji ini di FreeBSD dan di sana nilai yang dilaporkan adalah "berkeley-unix".
sumber
Ada juga (setidaknya dalam versi 24-26)
system-configuration
, jika Anda ingin menyesuaikan perbedaan dalam sistem build. Namun, dokumentasi variabel ini tidak menjelaskan kemungkinan valas yang mungkin dikandungnya seperti dokumentasisystem-type
variabel tersebut.sumber