ऑपरेटिंग सिस्टम का निर्धारण कैसे करें?


91

मैं कैसे निर्धारित करूँ कि कौन से OS Emacs ELisp में चल रहे हैं?

मैं .emacsओएस के आधार पर अलग-अलग कोड चलाना चाहूंगा ।


1
जीएनयू से Emacs लिस्प पुस्तिका का संदर्भ gnu.org/software/emacs/manual/html_node/elisp/...
WisdomFusion

जवाबों:


98

system-typeचर:

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

नए लोगों के लिए elisp, एक नमूना उपयोग:

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

ठीक है, मैंने खुद को एलिस्प में अजीब शाखा खंडों के साथ कई बार जला दिया (यदि- और-और-भाग एक नई prognरेखा द्वारा अलग किया जाता है, ब्लॉकों के लिए आवश्यक है), तो सभी को क्वर्की से परिचित नहीं होने की सिफारिश - इस उत्तर की जांच करें
मेटाकर्मिट

1
@ kermit666 वास्तव prognमें जरूरत नहीं है अगर आप एक और मामला नहीं है। मेरे कहने का मतलब यह है कि आप whenइसके बजाय इस्तेमाल कर सकते हैं if, जो कि बराबर है(if ... (progn ...) '())
इलेक्ट्रिक कॉफ़ी

1
क्योंकि मुझे "=" का उपयोग करने की कोशिश कर रहा था और यह काम नहीं कर रहा था।
फिलिप डेनियल

3
@metakermit आप इस condतरह का उपयोग कर सकते हैं :(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
ealfonso

मेरा मतलब था case, नहीं condcaseचूंकि काम system-typeएक प्रतीक की तरह है 'gnu/linuxया darwin, स्ट्रिंग नहीं
ealfonso

22

मैंने सिस्टम-प्रकार के आधार पर आसानी से कोड चलाने के लिए एक साधारण मैक्रो बनाया:

(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

.Emacs में केवल चर ही नहीं है system-type, बल्कि window-systemचर भी है । यह तब उपयोगी होता है जब आप कुछ x केवल विकल्प, या एक टर्मिनल, या मैकोस सेटिंग के बीच चयन करना चाहते हैं।


5

अब विंडोज के लिए लिनक्स सबसिस्टम भी है (विंडोज 10 के तहत बैश) जहां system-typeहै gnu/linux। इस सिस्टम प्रकार के उपयोग का पता लगाने के लिए:

(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

यह ज्यादातर पहले से ही उत्तर दिया गया है, लेकिन रुचि रखने वालों के लिए, मैंने बस FreeBSD पर यह परीक्षण किया और रिपोर्ट की गई कीमत "बर्कले-यूनिक्स" थी।


0

system-configurationनिर्माण प्रणाली में अंतर के लिए समायोजित करना चाहते हैं, तो कम से कम (संस्करणों में 24-26) भी है। हालांकि, इस वेरिएबल के डॉक्यूमेंटेशन में उन संभावित वैल्स का वर्णन नहीं किया गया है जिनमें यह हो सकता है जैसे system-typeवेरिएबल का डॉक्यूमेंटेशन हो ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.