যেহেতু আরম্ভের জন্য কেবল একটি ফাইল লোড করা এবং অন্যদিকে আমার রানটাইমের পরিবেশ .emacs.d
পরিবর্তনের HOME
পরিবর্তে সিলেকিং করা বা পরিবর্তন করা হয়েছে , তাই আমি @ গ্লুকাস প্রস্তাবিত কি তার বৈকল্পিকের জন্য বেছে নিয়েছি। আমি কোডটি ব্যবহার করেছি startup.el
এবং # 15539 থেকে প্যাচটি যুক্ত করেছি বিভিন্ন ডিআইআর এর মধ্যে স্যুইচিংয়ের জন্য পরিবেশ পরিবর্তনশীল ব্যবহার করতে। যদি কিছু না দেওয়া হয় তবে ডিফল্ট ব্যবহার করা হয়।
স্পেসম্যাকস নিয়ে একটি সমস্যা ছিল: async
পরিবর্তিত init ডিরেক্টরি সম্পর্কে জানে না এবং তাই কিছু প্রয়োজনীয় ফাইল খুঁজে পাওয়া যায় না। তবে এটি সম্প্রতি স্পেসম্যাক্সে সমাধান করা হয়েছে: .emacs.d ব্যতীত কোনও কনফিগারেশন ডিরেক্টরি ব্যবহার করার সময় ত্রুটি · সমস্যা # 3390
সুতরাং এখানে আমার ~/.emacs
মূল টি-কোড কোডটির মতো আচরণ করা উচিত তবে কনফিগারযোগ্য ডিআর ডিরেক্টরি সহ:
;;; .emacs --- let the user choose the emacs environment to use
;;; Commentary:
;;; This code mimics the behaviour of `startup.el' to let the
;;; usage of the custom init directory behave just like the
;;; one and only "~/.emacs.d".
;;;
;;; By setting the environment variable `EMACS_USER_DIRECTORY'
;;; the user-emacs-directory can be chosen and if there is an
;;; `init.el' the configuration from that directory will be used.
;;; If the environment variable is not set or there is no `init.el'
;;; the default configuration directory `~/.emacs.d/' will be used.
;;;
;;; The variable `server-name' will be set to the name of the directory
;;; chosen as start path. So if the server will be started, it can be
;;; reached with 'emacsclient -s servername'.
;;;
;;; This now works with a current version of spacemacs but does not
;;; work with `async-start' in general, if the code executed with `async'
;;; uses `user-init-dir' or makes other assumptions about the emacs
;;; start-directory.
;;; Code:
(let* ((user-init-dir-default
(file-name-as-directory (concat "~" init-file-user "/.emacs.d")))
(user-init-dir
(file-name-as-directory (or (getenv "EMACS_USER_DIRECTORY")
user-init-dir-default)))
(user-init-file-1
(expand-file-name "init" user-init-dir)))
(setq user-emacs-directory user-init-dir)
(with-eval-after-load "server"
(setq server-name
(let ((server--name (file-name-nondirectory
(directory-file-name user-emacs-directory))))
(if (equal server--name ".emacs.d")
"server"
server--name))))
(setq user-init-file t)
(load user-init-file-1 t t)
(when (eq user-init-file t)
(setq user-emacs-directory user-init-dir-default)
(load (expand-file-name "init" user-init-dir-default) t t)))
(provide '.emacs)
;;; .emacs ends here
একটি দুর্দান্ত সংযোজন রয়েছে যা এটি অতিরিক্ত প্রচেষ্টা ছাড়াই ডেমন হিসাবে কাজ করে: সার্ভার-নামটি ডিরেক্টরি ডিরেক্টরিটির নামে সেট করা হবে। সুতরাং এখন আপনি একটি ভ্যানিলা স্পেসম্যাকস দিয়ে দ্বিতীয় ইমাস ডেমন শুরু করতে পারেন
EMACS_USER_DIRECTORY=~/.emacsenv.d/spacemacs emacs --daemon
এবং এখনও emacsclient ব্যবহার করুন
emacsclient -s spacemacs -c -e '(message "Hello spacemacs")'
আমার ইউসকেসটি খুব সহজ এবং আমি অবাক হয়েছি যে আমিই একমাত্র: আমার কাছে সর্বদা চলমান ইম্যাকস ডেমন থাকে এবং এটি গুই এবং ওভার কনসোল থেকে ব্যবহার করি (উদাহরণস্বরূপ এসএসএস সহ)। এই ইমাসে আমি আমার সমস্ত ডকুমেন্টেশন এবং কাজের লগ প্রস্তুত করি, তাই এটি সর্বদা সেখানে থাকতে হবে। তবে তারপরে আমি আমার বর্তমান কনফিগারেশনটি অবসর না নিতে বা কিছু চালাক ধারণা ব্যবহার না করা অবধি স্পেসম্যাকস বা অন্য বিতরণ প্যাকেজগুলির মধ্যে একটির চেষ্টা এবং এটি কনফিগার করতে চাই। এবং অন্য হিসাবে, আমি আমার সহকর্মীদের জন্য একটি সাধারণ বেস কনফিগারেশন তৈরি করতে চেয়েছিলাম - এবং এটি আমার চলমান দৃষ্টান্তে org- মোডের সাথে নথিভুক্ত করেছি।
যেহেতু আমি কেবলমাত্র সমস্যাটি async
জানি এবং এটি পরিবর্তিত ডিআইডি ডির সম্পর্কে জানিনা, তাই আমি কিছু কনফিগারেশন যুক্ত করতে চাই async
যে এর মধ্যে ভেরিয়েবল রয়েছে যা ডিফল্টরূপে ইনজেকশন করা উচিত, যাতে সমস্ত প্যাচ করার প্রয়োজন হয় না এর আমন্ত্রণ async-start
ঠিক যেমন spacemacs সম্পন্ন করেছে।