मैं एक फ़ाइल स्थानीय चर के साथ एक Emacs बफर नाम कैसे सेट करूं?




(2)

मुझे अपने emacs बफ़र को फ़ाइल नाम से एक अलग नाम रखना है। प्रत्येक समय मैन्युअल रूप से सेट करने के बजाय, मैं चाहता हूं कि यह फ़ाइल सामग्री पर आधारित स्वतः हो, ऐसा कुछ:

// स्थानीय चर:
// बफ़र-नाम: MyName
// समाप्त:

लेकिन यह काम नहीं करता क्योंकि बफर-नाम फ़ंक्शन है, एक चर नहीं है। मैं यह कैसे कर सकता हूँ?


तुम कह सकते हो:

// Local Variables:
// eval: (rename-buffer "my-buffer-name-here")
// end:

यह एक चाल है हालांकि।

आप अन्यथा अपने .emacs में एक find-file-hook हुक को प्रोग्राम कर सकते हैं जो बफर को एक विशिष्ट स्थानीय वैरिएबल सामग्री के नाम से बदलते हैं। कुछ इस तरह:

(defvar pdp-buffer-name nil)

(defun pdp-rename-buffer-if-necessary ()
  "Rename the current buffer according to the value of variable"
  (interactive)
  (if (and pdp-buffer-name (stringp pdp-buffer-name))
      (rename-buffer pdp-buffer-name)))

(add-hook 'find-file-hook 'pdp-rename-buffer-if-necessary)

फिर आपकी विशिष्ट फ़ाइल में आपके पास है

// Local Variables:
// pdp-buffer-name: "pierre" 
// end:

अधिक मस्तिष्क की शक्ति के साथ आपके पास एक अच्छा समाधान हो सकता है

ध्यान दें कि पहले से ही आपकी आवश्यकता के लिए एक एक्सटेंशन मौजूद हो सकता है Emacs विकी में देखो


धन्यवाद पियरे आपका पीडीपी-बफर-नाम एलिसप उदाहरण बहुत अच्छी तरह से काम किया।

मैंने एक वृद्धि की क्योंकि मुझे लगता है कि एमएसीएसी स्थानीय वैरिएबल को "असुरक्षित" के रूप में इलाज कर रहा था यानी हमेशा यह पूछने के लिए प्रेरित करती है कि मूल्य लागू किया जाना चाहिए। चूंकि मैं इसे "सुरक्षित" मानों की सूची के साथ अपने .emacs को बिना किसी क्लैटरिंग के कई अलग-अलग मानों के साथ काम करना चाहता हूं, इसलिए मैंने सलाह का एक हिस्सा जोड़ा पिछले उदाहरण के नामकरण के साथ, यह इस तरह दिखता है:

;; allow all values for "pdp-buffer-name"  
(defadvice safe-local-variable-p (after allow-pdp-buffer-name (sym val) activate)  
  (if (eq sym 'pdp-buffer-name)    
      (setq ad-return-value t))  
  )  




emacs