ELisp এর অধীনে কোন OS Emacs চলছে তা আমি প্রোগ্রামগতভাবে কীভাবে নির্ধারণ করব?
আমি .emacsওএসের উপর নির্ভর করে বিভিন্ন কোড চালাতে চাই ।
উত্তর:
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.
লোকেদের নতুন করে এলিসপ করার জন্য, একটি নমুনার ব্যবহার:
(if (eq system-type 'darwin)
; something for OS X if true
; optional something if not
)
prognহয়, ব্লকের জন্য প্রয়োজনীয়), তাই কিরকগুলির সাথে পরিচিত না সবার জন্য একটি সুপারিশ - এই উত্তরটি দেখুন ।
prognআপনার কাছে অন্য কোনও মামলা না থাকলে @ kermit666 আসলে প্রয়োজন হয় না actually আমি এর দ্বারা যা বোঝাচ্ছি তা হ'ল আপনি কেবল তার whenপরিবর্তে ব্যবহার করতে পারেন ifযা সমান(if ... (progn ...) '())
condমতো ব্যবহার করতে পারেন :(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
case, না cond। caseযেহেতু স্ট্রিংয়ের system-typeমতো নয় 'gnu/linuxবা প্রতীক হিসাবে কাজ করেdarwin
সিস্টেম-টাইপের উপর নির্ভর করে সহজেই কোড চালানোর জন্য আমি একটি সাধারণ ম্যাক্রো তৈরি করেছি:
(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!"))
এখন উইন্ডোজের জন্য লিনাক্স সাবসিস্টেমও রয়েছে (উইন্ডোজ 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")
)
এটি বেশিরভাগই ইতিমধ্যে উত্তর দেওয়া হয়েছে, তবে যারা আগ্রহী তাদের জন্য আমি কেবল এটি ফ্রিবিএসডি-তে পরীক্ষা করেছিলাম এবং সেখানে রিপোর্ট করা মানটি ছিল "বার্কলে-ইউনিক্স"।