क्या कुंजी दबाने से सही `(kbd" ... ") को सम्मिलित करने का कोई कार्य है?


20

मैं kbdफ़ंक्शन के लिए महत्वपूर्ण नामों को देख कर ऊब गया हूं , क्या कुंजी को दबाकर स्वचालित रूप से सही कुंजी नाम डालने का एक तरीका है?

इसलिए उदाहरण के लिए मुझे ऐसा करने के लिए कुछ चाहिए: मैं टाइप कर रहा हूं

(local-set-key |

मैं भागता हूं magical-insert-kbd-command, एफ 6 दबाता हूं और मुझे मिलता है

(local-set-key (kbd "<f6>") |

जवाबों:


20

निश्चित नहीं कि आप क्या पूछ रहे हैं। लेकिन C-h kकुंजी मारने के बाद आपको पता चलता है कि आपको किस स्ट्रिंग से गुजरने की आवश्यकता है kbd। उदाहरण के लिए, C-h k f6आपको दिखाता है <f6>

यहाँ एक कमांड है जो आप चाहते हैं, मुझे लगता है और परिणाम के लिए बाध्य करता है C-c c:

(defun foo (key)
  (interactive "kKey: ")
  (insert (format "(kbd %S)" (key-description key))))

(global-set-key (kbd "C-c c") 'foo)

फिर टाइप करें:

(local-set-key C-c c

यह आपको एक कुंजी का उपयोग करने का संकेत देता है। यदि आप F6कुंजी को मारते हैं तो आपको यह मिलता है:

(local-set-key (kbd "<f6>") 

[@HaraldHancheOlsen द्वारा प्रति सुझाव अपडेट किया गया: बदल दिया "(kbd \"%s\")"गया".](kbd %S)"


बहुत बहुत धन्यवाद!। मुख्य बात जो मुझे याद आ रही थी वह key-descriptionफ़ंक्शन याद कर रही थी ।
dshepherd

लेकिन ओपी सही है कि यह एक ऐसा फ़ंक्शन है जो स्वचालित रूप से कीबाइंडिंग को किल रिंग में रखता है।
गरमागरम

1
@incandescentman: हुह? ओपी ने मारने की अंगूठी के बारे में कहां कहा है ? और उस वाक्य में "कीबाइंडिंग" से आपका क्या अभिप्राय है? एक कुंजी बंधन एक स्ट्रिंग नहीं है, जो कि kill-ringइसमें शामिल है। क्या आपका मतलब key-descriptionस्ट्रिंग से है? या उपरोक्त formatsexp का रिटर्न मान ? वैसे भी, यह स्पष्ट होना चाहिए कि मैंने जो आदेश दिया था, उनमें से किसी को कैसे जोड़ना है kill-ring(बस उपयोग kill-new)।
आकर्षित किया

"स्वचालित रूप से सम्मिलित करें।" अगर मैं सही तरीके से समझूं, तो ऊपर दिया गया समाधान केवल कीबाइंडिंग (उदाहरण kbd <M-return>) प्रदर्शित करता है, लेकिन इसे एक इनिट फ़ाइल में सम्मिलित नहीं करता है। (आपको कॉपी / पेस्ट का अतिरिक्त चरण करना होगा।) शायद मुझे गलत समझा गया। अपने स्वयं के व्यक्तिगत उपयोग के मामले के लिए, मैं यह उपयोगी एक की बाइंडिंग के लिए वाक्यविन्यास क्वेरी करने के लिए एक तरीका है के लिए मिल जाएंगे (जैसे वाक्य रचना है M-RETया M-<return>मार अंगूठी / पेस्टबोर्ड में कि स्ट्रिंग जगह या क्या?) और स्वचालित रूप से है, ताकि मैं तो कर सकते थे जैसे लाइन लिखते समय कीबाइंड को मेरे इनिट फ़ाइल में पेस्ट करें (define-key map (kbd "<M-return>") 'org-return)
गरमागरम

1
हां, आपने गलत समझा। (लेकिन की-बाइंडिंग सेक्सप में एक टाइपो भी था: मैं सेक्सप kbdमें उपयोग करना भूल गया global-set-key- अब ठीक किया गया।) कमांड foo(जो कि global-set-keyसेक्सप बाइंड करता है C-c c) एक प्रमुख अनुक्रम पढ़ता है और फिर वर्तमान बफर के बिंदु पर आवेषण को सम्मिलित करता है। kbdइसके लिए उचित सेक्सप यदि आप C-c cअपनी init फ़ाइल में उपयोग करते हैं, के बाद (local-set-key , तो यह kbdआपके द्वारा पढ़ी जाने वाली कुंजी के लिए आवश्यक sexp सम्मिलित करता है।
आकर्षित किया

7

यदि आप M-x local-set-keyअपने कीबाइंडिंग को अंतःक्रियात्मक रूप से करने के लिए उपयोग करते हैं, तो आप एक लिस्प अभिव्यक्ति प्राप्त करने के लिए C-x ESC ESC( repeat-complex-command) का उपयोग कर सकते हैं जिसे आप अपने कॉन्फिग में पेस्ट कर सकते हैं। यह शायद अनुकूल- (kbd ...)शैली विवरण का उपयोग नहीं करेगा , हालांकि।


साफ। मैं define-keyहालांकि वास्तव में उपयोग करना चाहता हूं , यह कुंजी को परिभाषित करने के लिए फ़ंक्शन को कॉल करने के लिए हुक स्थापित करने की तुलना में केवल कुंजी को सरल रूप से परिभाषित करना सरल लगता है।
dshepherd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.