2010-12-02 11 views
12

मैं अपने खुद के इस्तेमाल के लिए Emacs में Ctrl +टैब उपयोग करना चाहते हैं, लेकिन Emacs ऑर्ग मोड पहले से ही इस बाध्य है। मैं ऑर्ग-मोड बाध्यकारी के बजाय अपने स्वयं के बाध्यकारी का उपयोग कैसे कर सकता हूं।Emacs में Ctrl-Tab ओवरराइड org.mode

मेरी .emacs में फ़ाइल मैं का उपयोग करें:

(global-set-key (kbd "<C-tab>") 'switch-view) 

और यह ऑर्ग मोड

उत्तर

19

कुंजी को छोड़कर हर जगह काम करता है बाध्यकारी आप का वर्णन इस तरह org.el में परिभाषित किया गया है:

(org-defkey org-mode-map [(control tab)] 'org-force-cycle-archived) 

इसका मतलब यह है कि यह org-mode-map में ही मान्य है, org मोड के स्थानीय keymaps में से एक। निम्नलिखित कोड एक हुक कहते हैं कि जब ऑर्ग-मोड प्रारंभ होने से चलाया जाता है। यह org-mode-map से उस कुंजी बाध्यकारी को हटा देता है।

(add-hook 'org-mode-hook 
      '(lambda() 
      (define-key org-mode-map [(control tab)] nil))) 

अपने .emacs फ़ाइल के लिए इस कोड जोड़ें और फिर Emacs पुनरारंभ करें।

+0

मैं इस "ऐड-हुक" लाइन कहाँ जोड़ सकता हूँ:

इस क्यू जानकारी के लिए & एक देखते हैं? मैं जोड़ सकता है अगर यह .emacs के लिए यह आदर्श होगा :) – Zubair

+0

मैं अपने .emacs फ़ाइल है और यह भी कोई बदलाव नहीं आया – Zubair

+0

मैं भी org.el में ord-defkey बाहर टिप्पणी कोशिश की, लेकिन कोई परिवर्तन नहीं करने के लिए इस हुक गयी। मुझे लगता है कि वहाँ पर जा रहा precompiling तो संशोधित org.el फ़ाइल नजरअंदाज कर दिया है – Zubair

2

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

आप क्या कर सकते हैं, हालांकि, एक कॉलबैक समारोह है कि शुरू हो जाती है जब भी आप ऑर्ग मोड शुरू जोड़ने है, और उस कॉलबैक फ़ंक्शन में आप सी-टैब रीसेट स्विच-व्यू आह्वान करने के लिए:

(add-hook 'org-mode-hook (lambda() (local-set-key [(control tab)] 'switch-view))) 

रखें आपकी .emacs फ़ाइल में उपरोक्त पंक्ति और अगली बार जब आप एक नया Emacs शुरू करते हैं तो आपको जाने के लिए अच्छा होना चाहिए।

+0

मैंने अपनी .emacs फ़ाइल के अंत तक ऊपर की रेखा को जोड़ा लेकिन इसका – Zubair

+0

पर कोई प्रभाव नहीं पड़ा क्या आपने अपनी .emacs फ़ाइल में लाइन जोड़ने के बाद Emacs को पुनरारंभ किया था? आप Emacs का किस संस्करण का उपयोग करते हैं? – Thomas

+0

वास्तव में, मुझे लगता है कि मुझे पेपरिका के संस्करण को बेहतर पसंद है। मैंने कोशिश की है कि एक भी, और यह मेरे लिए जीएनयू Emacs 23.1.1 में काम करता है। – Thomas

5

प्रमुख मोड की परवाह किए बिना कीबाइंडिंग है कि आप प्रभाव हर जगह ले जाना चाहते हैं स्थापित करने के लिए एक और अधिक मजबूत तरीका एक कस्टम कीमैप के साथ एक वैश्विक नाबालिग मोड परिभाषित करने के लिए है।

माइनर मोड में स्थानीय कीपैप्स भी हो सकते हैं; जब भी एक छोटी सी मोड प्रभाव में है, इसका कीमैप में परिभाषाओं दोनों प्रमुख मोड के स्थानीय कीमैप और वैश्विक कीमैप

(http://www.gnu.org/software/emacs/manual/html_node/emacs/Local-Keymaps.html)

इस तरह आप प्रमुख मोड के साथ गड़बड़ की जरूरत नहीं है ओवरराइड स्थानीय कुंजीमैप हर बार जब आप एक मोड का सामना करते हैं जो आपके कीबाइंडिंग को पकड़ता है।
Globally override key binding in Emacs

संबंधित मुद्दे