ध्यान दें कि आप अभी भी apply-macro-to-region-lines
का उपयोग कोड से उत्पन्न मैक्रो के साथ कर सकते हैं, प्रदान किया गया मैक्रो को वेक्टर या स्ट्रिंग के रूप में परिभाषित किया गया है। एक कस्टम apply-named-macro-to-region-lines
[2] के साथ, आप इंटरैक्टिव रूप से उपयोग करने के लिए मैक्रो का चयन कर सकते हैं।
Emacs के नाम पर उपयोग की जाने वाली विधि के आधार पर कीबोर्ड मैक्रो से कोड उत्पन्न करने के दो तरीके हैं।
आप kmacro-name-last-macro
(सी-एक्ससी-कश्मीरn करने के लिए बाध्य) का उपयोग करते हैं, तो Emacs एक समारोह मैक्रो है, जो इस विशेष उद्देश्य के लिए सीधे उपयोगी नहीं है से उत्पन्न करता है [1]।
यदि आप अपने मैक्रो नाम देने के लिए name-last-kbd-macro
का उपयोग करते हैं, तो यह एक वेक्टर या स्ट्रिंग के रूप में उत्पन्न किया जाएगा।
किसी भी मामले में, तो आप कोड प्राप्त करने के लिए insert-kbd-macro
का उपयोग करें।
वास्तव में वेक्टर/स्ट्रिंग प्रारूप, डिफ़ॉल्ट है ताकि आप नामकरण चरण को बायपास और तुरंत कोड के लिए पूछ सकते मैन्युअल रूप से (सबसे हाल ही में परिभाषित मैक्रो को इंगित करने के नाम प्रॉम्प्ट पर आरईटी टाइपिंग), और फिर सम्मिलित कोड का डिफ़ॉल्ट नाम संपादित करें।
[1]: वेक्टर फॉर्म केवल फ़ंक्शन परिभाषा में एम्बेड किया गया प्रतीत होता है, इसलिए आप कोड से इसे निकालने में सक्षम होना चाहिए ताकि वेक्टर प्रारूप में मैक्रो फ़ंक्शन को मैन्युअल रूप से फिर से परिभाषित कर सकें।
[2]: जब मैंने मूल रूप से यह उत्तर लिखा था, तो मैं भूल गया था कि यह एक कस्टम फ़ंक्शन था। उसके लिए माफ़ करना।
(defun apply-named-macro-to-region-lines (top bottom)
"Apply named keyboard macro to all lines in the region."
(interactive "r")
(let ((macro (intern
(completing-read "kbd macro (name): "
obarray
(lambda (elt)
(and (fboundp elt)
(or (stringp (symbol-function elt))
(vectorp (symbol-function elt))
(get elt 'kmacro))))
t))))
(apply-macro-to-region-lines top bottom macro)))
sanityinnc धन्यवाद! – dola