लघु उत्तर
समस्या पंक्ति:
'(((kbd "<kp-1>") . "a"))
समाधान (मैक्रो के मूल्यांकन के लिए मजबूर):
;; Single quote changed to back-quote and added a comma
`((,(kbd "<kp-1>") . "a"))
लांग उत्तर
define-minor-mode मैक्रो आपको अपेक्षाकृत आसानी से मामूली मोड बनाने की अनुमति देता है (जहां तक Emacs) जाता है।
सबसे पहले मैं दिखाता हूँ कि यह कैसे हुआ, तो मैं समझाऊंगा कि यह कैसे काम करता है:
सामान्य रूप में:
(define-minor-mode NAME-mode
"DOCUMENTATION"
INIT-VALUE
"LIGHTER"
;; keymap
'(
(KEY-SEQUENCE . DEFINITION)
(KEY-SEQUENCE . DEFINITION)
... ETC ...
)
;; other options
:KEYWORD-ARG VALUE
:KEYWORD-ARG VALUE
... ETC ...
)
alist में मैक्रोज़ के लिए मजबूर मूल्यांकन के साथ विशिष्ट उदाहरण:
;; Custom Minor Mode
(define-minor-mode custom-mode
"Doc description, yada yada yada."
;; The initial value - Set to 1 to enable by default
nil
;; The indicator for the mode line.
" CustomMode"
;; The minor mode keymap
`(
(,(kbd "C-c C-a") . some-command)
(,(kbd "C-c C-b") . other-command)
("\C-c\C-c" . "This works too")
)
;; Make mode global rather than buffer local
:global 1
)
एक वैकल्पिक तरीका, आप कीमैप के लिए एक चर का उपयोग करना चाहते हैं तो टी से पहले कीमैप चर और कीमैप परिभाषित करने के लिए है
(define-key custom-mode-keymap (kbd "C-c C-b") 'other-command)
;; Num pad enable
(define-minor-mode custom-mode
...
;; The minor mode bindings.
custom-mode-keymap
कैसे
(defvar custom-mode-keymap (make-keymap) "num-mode keymap.")
(define-key custom-mode-keymap (kbd "C-c C-a") 'some-command)
और फिर, अपनी नाबालिग मोड परिभाषा, सरल सूची चर नाम अपने कीमैप के लिए, alist के बजाय यह सब काम करता है: इस तरह वह नाबालिग मोड घोषणा कुछ
ऊपर से नीचे तक, परिभाषित करने के बाद दाएं-मामूली-मोड हम नाबालिग मोड को टॉगल करने के लिए कमांड नाम परिभाषित करते हैं। इस मामले में custom-mode
(मोड को टॉगल करने के लिए M-x custom-mode
)। यह एक ही नाम के एक चर को परिभाषित करता है।
कमांड नाम के ठीक बाद, हम उद्धरण में मामूली मोड के लिए प्रलेखन स्ट्रिंग सूचीबद्ध करते हैं। जब तक आप चाहें उतना अधिक हो सकता है।
अगला हमारे पास कई विकल्प हैं। सबसे आसान विकल्प केवल तीन चीजों को सूचीबद्ध करना है और फिर कोई अतिरिक्त विकल्प। तीन चीजों को नीचे दिए गए क्रम में सूचीबद्ध किया जाना है। ये तीन चीजें हैं:
नाबालिग मोड चर के लिए initilization मान। nil
डिफ़ॉल्ट रूप से मोड बंद होगा। nil
के अलावा कुछ अन्य डिफ़ॉल्ट रूप से होगा।
हल्का। हल्का बस आपके नाबालिग मोड चालू होने पर मोड लाइन में प्रदर्शित होता है। यह छोटा होना चाहिए, और यह अक्सर एक स्थान के साथ शुरू करने के लिए स्वरूपण के मामले में मदद करेगा।
कीमैप। कीमैप या तो एक चर या एक alist (एसोसिएशन सूची) के रूप में परिभाषित किया जा सकता है। चूंकि alist का उपयोग करना सरल और छोटा है, उदाहरण के लिए मैंने यही उपयोग किया था। Alist (key-sequence . definition)
रूप में होना चाहिए।
आप एक alist रूप कीमैप को परिभाषित करते हैं, तो आपको कुछ बातों का के लिए बाहर देखने के लिए, खासकर यदि आप वैश्विक कीबाइंडिंग को परिभाषित करने के लिए इस्तेमाल किया कर रहे हैं। सबसे पहले, कमांड नाम उद्धृत नहीं किए जाते हैं। दूसरा, यदि आप मैक्रो का उपयोग करना चाहते हैं, आपको force it to evaluate (and on SO) है। यह बैक-कोट (सिंगल कोट नहीं) और कॉमा के संयोजन के साथ किया जाता है। आप देख सकते हैं कि यह केबीआई मैक्रो के साथ उदाहरण में कैसे किया जाता है। यदि आप केबीडी मैक्रो का उपयोग नहीं करते हैं तो मैंने एक कीस्ट्रोक परिभाषा भी शामिल की है। यदि आप बस अपने कीमैप में एक स्ट्रिंग उद्धृत करते हैं, तो परिभाषित कुंजी संयोजन दबाए जाने पर प्रिंट आउट होगा (जैसे वैश्विक कुंजी बाइंडिंग को परिभाषित करने के लिए)।
कुंजीपैप केबीआई मैक्रोज़ के साथ काम नहीं करेगा यदि आप केबीई मैक्रोज़ के मूल्यांकन को पीछे उद्धरण और अल्पविराम के संयोजन के साथ मजबूर नहीं करते हैं। इस तरह:
`((,(kbd "C-c C-a") . some-command))
अंत में, आप अतिरिक्त विकल्प प्रपत्र :blah
के कीवर्ड-आर्ग का उपयोग कर जोड़ सकते हैं। उदाहरण में मैंने :global
का उपयोग किया। हम पूरे मोड को कीवर्ड-एर्ग के साथ परिभाषित कर सकते थे, लेकिन सही क्रम में केवल init value, लाइटर, और कीमैप को सूचीबद्ध करने के लिए यह छोटा है।
मैं यहां एक प्रारूपण का उपयोग करने की कोशिश कर रहा था: http://www.gnu.org/software/emacs/elisp/html_node/Defining-Minor-Modes.html उदाहरण में। यदि आप उस प्रारूप के लिए पूरी परिभाषा दिखा सकते हैं, तो यह बहुत अच्छा होगा। –
क्लोजर-मोड स्थानीय कीबाइंडिंग सेट अप करने के लिए इस शैली का उपयोग करता है - यहां इसके स्रोत पर एक नज़र डालें - http://github.com/jochu/clojure-mode/blob/master/clojure-mode.el –
धन्यवाद, यह अच्छा है देखने के लिए .el फ़ाइल उदाहरण। –