উত্তর:
কোন নিয়ম যার দ্বারা ব্যবহারকারী নির্ধারণ করতে পারেন প্যাকেজ কনফিগারেশন প্রয়োজন কিনা তা ব্যবহারকারীকে
:init
বা:config
?
সমস্ত সেটিংস এবং প্যাকেজগুলির ক্ষেত্রে প্রযোজ্য এমন কোনও সাধারণ নিয়ম নেই; আপনি শুধু পড়ার মাধ্যমে এই কীওয়ার্ড অর্থ সঙ্গে নিজেকে পরিচিত করতে প্রয়োজন README ফাইলের এর use-package
।
সংক্ষেপে, :init
ব্লকটি শুরুতে চালানো হয়, যেমন আপনি এর উপাদানগুলির ফর্মগুলি শীর্ষ স্তরের (অর্থাত্ একটি সাধারণ কলের বাইরে use-package
) এ রেখেছেন user-init-file
। এর অর্থ এটি সম্পর্কিত প্যাকেজটি লোড হয়েছে কিনা তা নির্বিশেষে এগুলি সর্বদা চালিত হয়।
:config
ব্লক, অন্য দিকে, পরে সংশ্লিষ্ট প্যাকেজ লোড হয়েছে চালানো হয়, উপায় দ্বারা eval-after-load
প্রক্রিয়া।
যেমন, আপনার কাছ থেকে প্রযোজ্য দীর্ঘক্ষন ধরে চলা সেটিংস চলন্ত দ্বারা আপনার প্রারম্ভকালে সময় উন্নত করতে পারেন :init
থেকে :config
। যদি আপনাকে কোনও ভেরিয়েবল পরিবর্তন করতে হয় যা কেবলমাত্র কোনও নির্দিষ্ট প্যাকেজ লোড করার পরে সংজ্ঞায়িত করা হয়, আপনাকে একইভাবে এটি :config
ব্লকে রাখা দরকার। কিছু ভেরিয়েবল যেমন gnus-home-directory
সম্পর্কিত প্যাকেজটি লোড হওয়ার আগে সেট করা দরকার, তাই এগুলি স্থাপন করা উচিত :init
। আমি দৃ applicable়ভাবে সমস্ত প্রযোজ্য add-hook
/ remove-hook
কলগুলি :init
ব্লকে রাখার পরামর্শ দিচ্ছি , যেমন আনবাউন্ড হওয়া সত্ত্বেও হুকগুলি সংশোধন করা যেতে পারে এবং এটি আপনার সেটআপে আরও পরিমিততা দেয়।
আপনি নতুন :custom
কীওয়ার্ড ব্যবহার করে বা সরাসরি কাস্টমাইজেশন ইন্টারফেসটি সরাসরি ব্যবহার করে কোনও নির্দিষ্ট সেটিংস কোথায় রাখবেন তা নির্ধারণ করা এড়াতে পারবেন ।
আমি নিশ্চিত না যে এখানে কোনও সাধারণ নিয়ম রয়েছে (" :init
প্রকৃত প্যাকেজ লোড করার আগে প্রাক কনফিগারেশনের :config
জন্য ব্যবহার এবং অন্যান্য, ভাল, কনফিগারেশনের জন্য ব্যবহার" বাদে )।
তবে আমি :init
যখন নিজের জন্য ব্যবহার করি , উদাহরণস্বরূপ, "এই" প্যাকেজটির ফাংশনগুলি ব্যবহার করতে আমি কিছু অন্যান্য মোড মানচিত্রের কী-বাইন্ডিং যুক্ত করতে চাই। এবং এখনও "এই" প্যাকেজটি অলস বোঝা হওয়া চাই।
এখানে আলস্য লোড উদাহরণ dired-ranger
:
(use-package dired-ranger
:commands (dired-ranger-copy dired-ranger-paste dired-ranger-move)
:init
(add-hook 'dired-mode-hook
(lambda ()
(define-key dired-mode-map (kbd "M-w") 'dired-ranger-copy)
(define-key dired-mode-map (kbd "C-y") 'dired-ranger-paste)
(define-key dired-mode-map (kbd "C-c C-y") 'dired-ranger-move))))
দ্রষ্টব্য: যদি কিছু নেই :defer
, :commands
, :mode
এবং অন্যদের প্যাকেজ লোড অলস করে তোলে, তারপর :init
এবং :config
বেশী বা কম একই হতে হবে (কিন্তু :init
তার আগে মূল্যায়ন করা হবে :))
:config
খুব দেরী হয়েছে - অলস লোডিং আমার বাইন্ডিংগুলি প্রয়োগ করবে না। আর :bind
সঙ্গে :map
আসলে বাঁধে না।
:config
খুব বেশি দেরি হয় না - ঠিক যখন dired-mode-map
এটি প্রথম সংজ্ঞায়িত হয়। আপনি সম্ভবত এটির পরিবর্তে এটির পরিবর্তে ভুল use-package
সংকেত দিচ্ছেন যেখানে সংজ্ঞা দেওয়া হয়েছে। এটি আপনার কাজ করে না কেন তাও ব্যাখ্যা করতে পারে। মূলত, হয় আপনি কিছু ভুল করছেন বা আপনার একটি বাগ রয়েছে। স্থানীয় কী-বাইন্ডিংগুলিকে এবং অটোল্যাড কমান্ড / কীম্যাপগুলির গ্লোবাল কী-বাইন্ডিংগুলিকে বিভ্রান্ত করবেন না । dired-ranger
dired
dired-mode-map
:bind
use-package
eval-after-load
use-package-always-ensure
এবং যখন আমি প্যাকেজযুক্ত প্যাকেজ ব্যবহার করার চেষ্টা করি তখন এটি এলপা থেকে আনতে ব্যর্থ হয়। তবে :ensure nil
সেখানে থাকা সমস্যার সমাধান করে এবং আমি চেইন প্যাকেজ লোড dired
-> dired-ranger
ব্যবহার করে সেট আপ করতে পারি :after
।
:bind
এটির জন্য কীওয়ার্ডটি ব্যবহার করতে পারেন বা:config
ব্লকের কী বাইন্ডিংগুলিকে সংশোধন করতে পারেন ।