ডিরেক্টরি-স্থানীয় ভেরিয়েবলগুলি পুনরায় লোড করা হচ্ছে


27

আপনি ডিরেক্টরি-স্থানীয় ভেরিয়েবলগুলি পুনরায় লোড করবেন কীভাবে? আমি একটিটি সংশোধন করতে চাই .dir-locals.elএবং বর্তমান ইমাস সেশনে এ জাতীয় পরিবর্তনগুলি প্রয়োগ করতে চাই।


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

@ প্রধানমন্ত্রী: তবে আমি বরং আরও প্রত্যক্ষ পদ্ধতির ব্যবহার করতে চাই, আপনার পরামর্শ কার্যকর হয়েছে। ধন্যবাদ।
এলেনা

3
@ প্রধানমন্ত্রীর আমি ভুল ছিলাম: স্থানীয় ভেরিয়েবলগুলি নিরাপদ হিসাবে নিবন্ধিত না করা হলে বাফারটি ফিরিয়ে দেওয়া কাজ করে না।
এলেনা

উত্তর:


21

এই ফাংশনটি দির-স্থানীয়দের ফাইলটি পুনরায় পড়বে এবং বর্তমান বাফারের জন্য নতুন মান নির্ধারণ করবে:

(defun my-reload-dir-locals-for-current-buffer ()
  "reload dir locals for the current buffer"
  (interactive)
  (let ((enable-local-variables :all))
    (hack-dir-local-variables-non-file-buffer)))

এবং যদি আপনি আপনার বর্তমান বাফার ডিরেক্টরিতে প্রতিটি বাফারের জন্য ডির-স্থানীয়দের পুনরায় লোড করতে চান:

(defun my-reload-dir-locals-for-all-buffer-in-this-directory ()
  "For every buffer with the same `default-directory` as the 
current buffer's, reload dir-locals."
  (interactive)
  (let ((dir default-directory))
    (dolist (buffer (buffer-list))
      (with-current-buffer buffer
        (when (equal default-directory dir))
        (my-reload-dir-locals-for-current-buffer)))))

আপনি একবার dir after-save-hook-local.el বাফার যুক্ত করে একটি দির-লোকাল ফাইল সংরক্ষণ করার সময় সমস্ত দির লোকাল রিফ্রেশ করতে পারেন ।

(add-hook 'emacs-lisp-mode-hook
          (defun enable-autoreload-for-dir-locals ()
            (when (and (buffer-file-name)
                       (equal dir-locals-file
                              (file-name-nondirectory (buffer-file-name))))
              (add-hook (make-variable-buffer-local 'after-save-hook)
                        'my-reload-dir-locals-for-all-buffer-in-this-directory))))

অবশ্যই এটির অনিচ্ছাকৃত পরিণতি হতে পারে কারণ এটি ভেরিয়েবলের মানগুলি অন্য কোথাও পরিবর্তন করা হয়েছে তা নির্বিশেষে পুনরায় সেট করবে, সুতরাং আপনার নিজের ঝুঁকিতে ব্যবহার করুন।


5
আমি প্রায় মনে করি এটি ইম্যাক্সে তৈরি করা উচিত।
পাইথননট

3

আপনি এটি ব্যবহার করতে পারেন: M-: (hack-dir-local-variables-non-file-buffer)


এটি কাজ করে কিনা তা পরীক্ষা করতে : বাফার থেকে (উদাহরণস্বরূপ একটি org মোড ফাইল) থেকে টাইপ করুন M-x add-dir-local-variable, তারপরে বৈধতা দিন (ডিফল্ট org- মোড), তারপরে ডেমো আরইটি টাইপ করুন, তারপরে "এটি একটি ডেমো" আরইটি টাইপ করুন।

আপনার .dir-local.el ফাইলটি একটি বাফারে প্রদর্শিত হবে:

;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")

((org-mode
  (demo . "this is a demo")))

আপনাকে এটি সংরক্ষণ করতে হবে: C-x C-s

তারপরে আপনার org মোড বাফারে ফিরে যান এবং ডেমো ভেরিয়েবল সংজ্ঞায়িত হয়নি তা পরীক্ষা করে দেখুন ( C-h C-v demo)

এখানে আপনি কৌশলটি ব্যবহার করতে পারেন: M-: (hack-dir-local-variables-non-file-buffer)

এখন C-h C-v demoমুদ্রণ করবে:

ডেমোর মান হ'ল "এটি একটি ডেমো" স্থানীয় বাফার poub.org এ স্থানীয়; বিশ্বব্যাপী অকার্যকর

এই ভেরিয়েবলের মান হ'ল ডিরেক্টরি-স্থানীয়,
'/ home/picaud/Temp/.dir-locals.el' ফাইল দ্বারা সেট করা ।

ডকুমেন্টেশন: ভেরিয়েবল হিসাবে নথিভুক্ত নয়।

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