"गलत प्रकार का तर्क: कमांड" त्रुटि जब एक कुंजी को लंबोदर को बांधता है


87

मुझे यहां "गलत प्रकार का तर्क: कमांडप, (लंबोदर नील (आगे की पंक्ति 5))" मिल रहा है।

(global-set-key [?\M-n] (lambda () (forward-line 5)))

त्रुटि क्या है? मुझे पूरा यकीन है कि यह सरल है और मुझे कुछ स्पष्ट याद आ रहा है।


आपको एक बंद कोष्ठक याद आ रहे हैं। शायद आपके कोड में नहीं, केवल प्रश्न में।
हेल्डर एस रिबेरो

एक साइड नोट के रूप में: जब आप अनाम फ़ंक्शन को इस तरह उद्धृत करते हैं कि यह संकलित नहीं किया जाएगा। मुझे लगता है कि यह आपके मामले में कोई बड़ी बात नहीं है, हालांकि।
फिल जैक्सन

जवाबों:


129

global-set-keyएक इंटरैक्टिव कमांड की उम्मीद है। (lambda () (interactive) (forward-line 5))काम करना चाहिए।

वैसे, इस तरह की C-h f commandpत्रुटियों के लिए एक बहुत अच्छा प्रारंभिक बिंदु है।


मुझे लगता है कि नीचे कोई पक्ष नहीं हैं। प्रलेखन से: >> "कॉल" "इंटरएक्टिव" वास्तव में एक फ़ंक्शन के बजाय एक घोषणा है; यह 'कॉल-इंटरैक्टिव' बताता है कि फ़ंक्शन को पास करने के लिए तर्क कैसे पढ़ें। जब वास्तव में कहा जाता है, तो 'इंटरएक्टिव' सिर्फ शून्य देता है।
डांगेलोव

तो (commandp)प्रलेखन के अनुसार , लैम्ब्डा काम करने के लिए शीर्ष स्तर की कॉल के साथ कार्य (interactive)करता है, लेकिन मैं (defun)उस फ़ंक्शन को कैसे काम कर सकता हूं ?
16

35

सही रूप यह होना चाहिए -

(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))

समस्या यह थी कि आप डाल देना भूल गए (interactive)(जैसा कि ब्रेंडन ने उल्लेख किया है)।

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


2

मैंने इस त्रुटि को एक नई मशीन पर भी देखा है जहां मैं अपनी सामान्य .emacsफ़ाइल का उपयोग कर रहा हूं लेकिन अपने पैकेजों को स्थापित नहीं किया है, और निष्पादित होने वाली कमांड उन पैकेजों में से एक है। (क्योंकि एक आदेश जिसे निश्चित रूप से निष्पादित नहीं किया जा सकता है वह इंटरैक्टिव नहीं है!)

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