2014-12-03 9 views
9

मैं emacs के लिए नया हूं, और एक रूकी सवाल है। मैं (global-set-key (kbd "C-c a b c") 'some-command) द्वारा किसी विशेष फ़ंक्शन की कुंजी को बाध्य कर सकता हूं, जहां some-command एक फ़ंक्शन है। मैं एक कुंजी बाध्यकारी के साथ दो कार्यों (some-command और some-other-command कहां) का आह्वान कर सकता हूं? आपका बहुत बहुत धन्यवाद!एकाधिक आदेशों के लिए Emacs कुंजी बाध्यकारी

उत्तर

10

आप अपने स्वयं के फ़ंक्शन को परिभाषित कर सकते हैं जो दो कार्यों को कॉल करता है, और अपने स्वयं के फ़ंक्शन की कुंजी को बाध्य करता है।

(global-set-key (kbd "C-c a b c") (lambda() (interactive) (some-command) (some-other-command))) 
+0

@Stefan क्या आप कृपया बताएंगे कि लैम्ब्स उद्धरण क्यों नहीं देते? – songyuanyao

+0

यह बहुत अच्छा काम करता है। धन्यवाद! मेरे पास उद्धरण के बारे में एक ही सवाल है --- मैं आमतौर पर भेड़ के बच्चे को भी उद्धृत करता हूं, और जानना चाहता हूं कि क्यों नहीं। –

+2

@ सोंग्युन्याओ: क्योंकि '' (...) 'एक * सूची * है, एक * समारोह * नहीं। Http://stackoverflow.com/questions/16801396/when-should-emacs-function-syntax-be-used/16802304#16802304 – Stefan

0

आप defun जिसमें आप तो funcall या apply साथ दूसरों आह्वान, जब आप इस तीसरे समारोह फोन (जो आप भी बाध्य कर सकते हैं) के साथ एक और functon परिभाषित कर सकते हैं यह दूसरों के आह्वान करेंगे।

1

एक कमांड को परिभाषित करें जो आपके द्वारा इच्छित कार्यों (आदेश) को सशर्त रूप से कॉल करता है। कॉल करने के लिए अंतर करने के लिए उपसर्ग तर्क का प्रयोग करें। तो यदि नया, प्रेषण कमांड कहता है, C-o, तो C-u C-o कार्यों में से एक को कॉल करेगा और C-o (उपसर्ग तर्क के बिना) दूसरे को कॉल करेगा। i interactive का उपयोग जहां यह इस सिखाता है खोजने के लिए -

आप C-h f interactive ऐसा करने के लिए, किसी आदेश स्वीकार करता है कि एक उपसर्ग तर्क आदि भी परामर्श elisp मैनुअल परिभाषित करने के लिए देखना चाहता हूँ जाएगा।

यह एक आसान और मजेदार व्यायाम है। अपने स्वयं के सरल आदेशों को परिभाषित करना सीखना Emacs से अपनी भाषा में बात करना शुरू करने का एक अच्छा तरीका है।

15

मैं कभी नहीं कुंजी को लैम्ब्डा भाव बंधन की सलाह देते हैं, सरल कारण है कि जब आप Emacs क्या है कि कुंजी करता पूछते हैं, तो यह आपको कुछ इस तरह कह (स्वीकार किए जाते हैं उपयोग करने के लिए खत्म हो जाएगा के लिए: या एक सरल लैम्ब्डा का उपयोग कोड, जब एक उदाहरण के रूप, बाइट-संकलित):

C-c a b c runs the command #[nil "\300 \210\301 \207" [some-command 
some-other-command] 1 nil nil], which is an interactive compiled Lisp 
function. 

It is bound to C-c a b c. 

(anonymous) 

Not documented. 

अपने कोड तुम कभी नहीं तो बाइट-संकलन, यह कम गुप्त, लेकिन अभी भी अस्वरूपित है:

C-c a b c runs the command (lambda nil (interactive) (some-command) 
(some-other-command)), which is an interactive Lisp function. 

कौन सा है, जबकि अभी भी पठनीय इस तरह के एक छोटे से काम के मामले में, तेजी से बड़े कार्यों के लिए समझ में आता है।

के साथ तुलना में:

C-c a b c runs the command my-run-some-commands, which is an 
interactive compiled Lisp function in `foo.el'. 

It is bound to C-c a b c. 

(my-run-some-commands) 

Run `some-command' and `some-other-command' in sequence. 

जो तुम मिल अगर आप नाम समारोह (जो यह एक गुमनाम समारोह करता है की तुलना में अधिक दस्तावेज़ के लिए आप को प्रोत्साहित करती है)।

(defun my-run-some-commands() 
    "Run `some-command' and `some-other-command' in sequence." 
    (interactive) 
    (some-command) 
    (some-other-command)) 

(global-set-key (kbd "C-c a b c") 'my-run-some-commands) 

अंत में, के रूप में abo-abo बताते हैं, यह भी मतलब है कि आप आसानी से यात्रा किसी भी समय है कि समारोह की परिभाषा, देखने के लिए या संपादित/पुनर्मूल्यांकन करने का कोड कर सकते हैं, या तो लिंक का पालन करके मदद बफर में या (मेरे उदाहरण में foo.el करने के लिए) प्रदान की, या का उपयोग कर एमएक्सfind-function (समारोह का नाम दर्ज करें) द्वारा, MXfind-function-on-key (कुंजी अनुक्रम यह करने के लिए बाध्य है टाइप)।

+2

बहुत महत्वपूर्ण बात यह है कि आप इस दृष्टिकोण का उपयोग कर कूद-से-परिभाषा कर सकते हैं। –

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