কীভাবে এলিস্পে অপারেটিং সিস্টেম নির্ধারণ করবেন?


92

ELisp এর অধীনে কোন OS Emacs চলছে তা আমি প্রোগ্রামগতভাবে কীভাবে নির্ধারণ করব?

আমি .emacsওএসের উপর নির্ভর করে বিভিন্ন কোড চালাতে চাই ।


উত্তর:


99

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

লোকেদের নতুন করে এলিসপ করার জন্য, একটি নমুনার ব্যবহার:

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

ঠিক আছে, আমি এলিস্পে অদ্ভুত শাখা ব্লকগুলি দিয়ে নিজেকে বেশ কয়েকবার জ্বালিয়েছি (যদি - এবং অন্য অংশটি একটি নতুন লাইনের দ্বারা পৃথক করে দেওয়া prognহয়, ব্লকের জন্য প্রয়োজনীয়), তাই কিরকগুলির সাথে পরিচিত না সবার জন্য একটি সুপারিশ - এই উত্তরটি দেখুন
metakermit

4
prognআপনার কাছে অন্য কোনও মামলা না থাকলে @ kermit666 আসলে প্রয়োজন হয় না actually আমি এর দ্বারা যা বোঝাচ্ছি তা হ'ল আপনি কেবল তার whenপরিবর্তে ব্যবহার করতে পারেন ifযা সমান(if ... (progn ...) '())
বৈদ্যুতিক কফি

4
উত্সাহিত হয়েছে কারণ আমি "=" ব্যবহার করার চেষ্টা করছিলাম এবং এটি কাজ করছে না।
ফিলিপ ড্যানিয়েলস

4
@ মেটকেমিট আপনি এর condমতো ব্যবহার করতে পারেন :(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
ইলফোনস

আমি বলতে চাইছি 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পরিবর্তনশীল। আপনি কিছু এক্স মাত্র বিকল্প, বা একটি টার্মিনাল বা ম্যাকোস সেটিংয়ের মধ্যে নির্বাচন করতে চাইলে এটি দরকারী।


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

এটি বেশিরভাগই ইতিমধ্যে উত্তর দেওয়া হয়েছে, তবে যারা আগ্রহী তাদের জন্য আমি কেবল এটি ফ্রিবিএসডি-তে পরীক্ষা করেছিলাম এবং সেখানে রিপোর্ট করা মানটি ছিল "বার্কলে-ইউনিক্স"।


0

এছাড়াও system-configurationযদি আপনি বিল্ড সিস্টেমের মধ্যে পার্থক্যের জন্য সামঞ্জস্য করতে চান তবে (অন্তত 24-26 সংস্করণগুলিতে) রয়েছে । যাইহোক, এই ভেরিয়েবলের ডকুমেন্টেশনটি system-typeভেরিয়েবলের ডকুমেন্টেশনের মতো এমন সম্ভাব্য ভেলগুলি বর্ণনা করে না ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.