2009-05-04 16 views
6

Emacs में एक कीस्ट्रोक को ध्यान में रखते हुए, उदा। सी-एक्स सी-एस। मैं यह पता लगा सकता हूं कि सी-एच सी कीस्ट्रोक टाइप करके यह कौन सा फ़ंक्शन आमंत्रित करता है, लेकिन मुझे यह कैसे पता चलेगा कि यह कीबाइंडिंग कहां परिभाषित की गई थी?किस फाइल में कीबाइंडिंग परिभाषित थी?

(हो सकता है कि सही जवाब है कि यह फैसला नहीं किया जा सकता क्योंकि keymaps इस प्रकार की जानकारी एकत्र नहीं करते है।)

उत्तर

5

जानकारी के साथ किबैंडिंग्स कहां से जुड़े हैं, इस बारे में जानकारी Emacs द्वारा नहीं रखी जाती है। वास्तव में, जवाब आमतौर पर अपरिभाषित है।

कई बार कुंजी बाइंडिंग एक मामूली मोड के दुष्प्रभाव के रूप में या मोड-हुक के माध्यम से स्थापित की जाती हैं। मामूली मोड के लिए कुंजी बाध्यकारी अक्सर कुछ चर जैसे comint-mode-map में संग्रहीत किया जाता है। यह कीमैप मोड-वेरिएबल comint-mode सेट करके सक्षम है। हालांकि, वह मोड मैप एक वैश्विक चर और कोई भी है, कहीं भी इसमें कुंजी बाइंडिंग जोड़ सकते हैं। तो, जो भी आप चाहते हैं वह करना अनिवार्य रूप से ट्रैकिंग करना है जो किसी विशेष मान के साथ चर सेट करता है। इसी प्रकार कुंजी बाइंडिंग के लिए जो मोड हुक के माध्यम से स्थानीय रूप से सेट होते हैं (local-set-key का उपयोग करके)। इसके अलावा आप file variables के माध्यम से कुंजी बाइंडिंग भी सेट कर सकते हैं। यह सब सिर्फ यह कहना है कि Emacs में कुंजी बाइंडिंग क्षणिक हैं।

सर्वश्रेष्ठ के बारे में आप कुंजी के साथ जुड़े फ़ंक्शन को ढूंढ सकते हैं, और उस फ़ाइल में देखें (या मोड से कई फ़ाइलों में विभाजित होने पर संबंधित फाइलें)।

एमएक्स में कुंजी बाध्यकारी लुकअप काफी महत्वपूर्ण है क्योंकि आप प्रमुख स्ट्रोक को सेट/संबद्ध कर सकते हैं (वैश्विक स्तर पर, प्रमुख मोड, मामूली मोड, मामूली मोड ओवरराइडिंग, स्थानीय से बफर, टेक्स्ट गुण इत्यादि)। त्वरित अवलोकन के लिए, this documentation देखें।

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

(defun guess-where-keybinding-is-defined (key) 
    "try to guess where a key binding might be defined" 
    (interactive (list (read-key-sequence "Describe key: "))) 
    (let ((bindings (minor-mode-key-binding key)) 
     found) 
    (while (and bindings (not found)) 
     (if (setq found (caar bindings)) 
      (find-function (cdar bindings))) 
     (setq bindings (cdr bindings))))) 

क्या कोई विशिष्ट समस्या है जिसे आप हल करने का प्रयास कर रहे हैं (इस प्रश्न के अलावा)?

+0

अपने विस्तृत जवाब के लिए धन्यवाद। सवाल जब मैं जो किसी विशेष की बाइंडिंग कोर मोड में या एक बाहरी पैकेज से परिभाषित किया गया था यह पता लगाने की कोशिश कर रहा था कल मेरे मन में आया था। –

1

बस कर एमएक्स लगता है-समारोह

Emacs डॉक से:

(लगता है-समारोह समारोह)

समारोह पास बिंदु की परिभाषा का पता लगाएं।

स्रोत बिंदु पास समारोह के परिभाषा युक्त फ़ाइल ढूँढता है (द्वारा चयनित `समारोह तथाकथित-एट-बिंदु ') एक बफर में और स्थानों से पहले परिभाषा इशारा करते हैं। आगे बढ़ने से पहले चिह्न सेट करें, यदि बफर पहले से मौजूद है।

+0

यह वह नहीं है जिसे मैं ढूंढ रहा हूं। यह * मुझसे कहता है, जहां एक * समारोह * नहीं एक * की बाइंडिंग परिभाषित किया गया था। –

+0

मुझे नहीं लगता कि आप इसे ढूंढ सकते हैं। –

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