एक बफर के लिए महत्वपूर्ण बाइंडिंग


14

क्या बफर के लिए विशिष्ट बाइंडिंग सेट करना संभव है?

मेरे पास मेरी ओआरजी फ़ाइलों में से एक है:

# Local Variables:
# eval: (local-set-key (kbd "<f10>") 'some-custom-defun-specific-to-this-buffer)
# End:

लेकिन यह बाइंडिंग अन्य org- मोड फ़ाइलों के लिए भी बनी रहती है। यदि मैं एक अलग प्रमुख मोड के साथ एक फ़ाइल खोलता हूं, तो मेरी डिफ़ॉल्ट कुंजी बाइंडिंग किक करती है।

ऐसा लगता local-set-keyहै कि बफर के लिए विशिष्ट नहीं प्रमुख-मोड के लिए विशिष्ट बाइंडिंग सेट कर रहा है।

मेरे पास ऐसे बाइंडिंग कैसे हो सकते हैं जो केवल एक विशेष बफर में सक्रिय होते हैं?


2
अरे वाह, आप सही कह रहे हैं: "बंधन वर्तमान बफ़र के स्थानीय मानचित्र में जाता है, जो ज्यादातर मामलों में अन्य बफ़र्स के साथ एक ही प्रमुख मोड में साझा किया जाता है।" मुझे नहीं पता था।
शॉस्ती

अब जब मैं इसके बारे में सोचता हूं, तो local-unset-keyहुक के साथ org-mode-hookकाम किया जा सकता है यदि इसे Local Variables:अनुभाग से पहले निष्पादित किया जाता है।
कौशल मोदी

या आप एक अर्ध विरल कीमैप के साथ एक छोटी सी विधा बना सकते हैं और इसका उपयोग करके टॉगल कर सकते हैंLocal Variables:
वम्सी

@Vamsi धन्यवाद! यह एक सुंदर समाधान है! मैंने आपका समाधान अपडेट कर दिया है।
कौशल मोदी

जवाबों:


17

बंद करने के लिए, यहाँ एक उत्तर है जो मेरी टिप्पणी पर विस्तृत है। मैं आवश्यक कीबाइंडिंग के साथ एक मामूली मोड को परिभाषित करता हूं और फ़ाइल स्थानीय चर का उपयोग करके आवश्यक बफर में इसे टॉगल करता हूं।

  (define-minor-mode my-org-buffer-local-mode
    "Minor mode to simulate buffer local keybindings."
    :init-value nil)
  (define-key my-org-buffer-local-mode-map (kbd "<f10>") 'some-custom-defun-specific-to-this-buffer)

आप निम्न प्रकार से फ़ाइल के अंत में स्थानीय चर अनुभाग सेट करके इसे आवश्यक फ़ाइलों में टॉगल कर सकते हैं। आप यहां कीबाइंडिंग को बदल या जोड़ भी सकते हैं। आपको अभी भी प्रत्येक बफ़र के लिए अलग-अलग मामूली मोड को परिभाषित करने की आवश्यकता होगी जो एक ही कुंजी-अनुक्रम को अलग-अलग कमांड में मैप करते हैं।

 # Local Variables:
 # my-org-buffer-local-mode: t
 # eval:(define-key my-org-buffer-local-mode-map (kbd "<f10>") 'some-other-custom-defun-specific-to-this-buffer)
 # End:

@kaushalmodi: अधिक पूर्ण होने के बाद आप अपने संपादनों को एक अलग उत्तर में बदलना चाह सकते हैं। इसके अलावा, जब तक आप बफर विशिष्ट नाम का उपयोग नहीं करते हैं, आप एक ही कुंजी-अनुक्रम को दो अलग-अलग कार्यों में एक साथ मैप करने में सक्षम नहीं होंगे।
वामसी

मुझे यह त्रुटि मिलती है: eval-buffer: Symbol's value as variable is void: my-org-buffer-local-mode-mapजब मैं इसे चलाने की कोशिश करता हूं(define-minor-mode my-org-buffer-local-mode "Minor mode to simulate buffer local keybindings." :init-value nil) (define-key my-org-buffer-local-mode-map (kbd "<f10>") 'some-custom-defun-specific-to-this-buffer)
गरमागरम

मुझे भी वही त्रुटि मिलती है। कोई उपाय?
१०:

:keymapकीवर्ड के साथ @incandescentman कॉल (मेक-कीमैप) , nullprogram.com/blog/2013/02/06 पर
nichijou

5

यहां बफर-विशिष्ट कुंजी बाइंडिंग सेट करने का एक सामान्य तरीका है।

  • एक अस्थायी माइनर मोड बनाएँ (नीचे स्निपेट को इसमें सहेजें temp-mode.elऔर requireइसे अपने में रखें init.el
  • उस temp-modeमामूली मोड को सक्षम करें और केवल उस बफर-मोड में परिभाषित करें, जिसकी आपको आवश्यकता है।

नीचे Local Variablesस्निपेट को बफर में रखें जहां आप कस्टम कुंजी बंधन चाहते हैं। नीचे org-modeफाइलों के उदाहरण दिए गए हैं ।

बफर वन में

# Local Variables:
# eval: (temp-mode 1)
# eval: (define-key temp-mode-map (kbd "<f10>") 'function-ONE)
# End:

यदि कुछ अन्य बफर उसी कुंजी-बाइंडिंग को फिर से परिभाषित करते हैं,

बफर TWO में

# Local Variables:
# eval: (temp-mode 1)
# eval: (define-key temp-mode-map (kbd "<f10>") 'function-TWO)
# End:

तब नया बंधन करने पर प्रभावी हो जाता है M-x revert-buffer

यदि मैं इन दो बफ़र्स के बीच बहुत बार स्विच करने की आवश्यकता है तो मुझे क्या करना होगा और अगर मुझे F10दोनों में बाइंडिंग का उपयोग करना है :

  • बफर वन में काम करें, C-x C-s(सेव करें) और बफर टू में स्विच करें
  • revert-buffer(रिफ्रेश बाइंडिंग), बफर टू में काम करें, C-x C-sऔर बफर वन पर जाएं
  • revert-buffer(रिफ्रेश बाइंडिंग), बफर वन में काम करें, C-x C-sऔर बफर टू में स्विच करें

लेकिन मैं अलग-अलग बफ़र-विशिष्ट कमांड को अलग-अलग कुंजी से बाँधूँगा।


अस्थायी मामूली मोड

;; temp-mode.el
;; Temporary minor mode
;; Main use is to enable it only in specific buffers to achieve the goal of
;; buffer-specific keymaps

(defvar temp-mode-map (make-sparse-keymap)
  "Keymap while temp-mode is active.")

;;;###autoload
(define-minor-mode temp-mode
  "A temporary minor mode to be activated only specific to a buffer."
  nil
  :lighter " Temp"
  temp-mode-map)

(provide 'temp-mode)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.