अद्यतन : मैंने सिमेंटिक रिफैक्टर पैकेज बनाया है जो इस समस्या को पूरी तरह से हल करता है। आप डेमो पर गौर कर सकते हैं कि यह कैसे काम करता है। इस उत्तर का शेष पाठ, इस वाक्य के बाद, पुराना है और इसे केवल ऐतिहासिक कारण के लिए रखा गया है।
पुराने उत्तर :
आप senator-copy-tag
फ़ंक्शन हस्ताक्षर की सटीक प्रतिलिपि बनाने के लिए उपयोग कर सकते हैं , फिर अपनी स्रोत फ़ाइल में वापस पेस्ट कर सकते हैं । senator-copy-tag
और सीनेटर कमांड उपलब्ध हैं जब आप सक्षम होते हैं semantic-mode
:
(semantic-mode 1)
सिमेंटिक एक एमएसीएस बिल्ट-इन पैकेज है।
आप अपने प्रोजेक्ट में कहीं से भी फंक्शन प्रोटोटाइप को दूसरी फाइल (एक ही नाम के साथ फाइल लेकिन अलग-अलग एक्सटेंशन में फाइल) में डालने के लिए प्रोजेक्टाइल के साथ सिमेंटिक सेनेटर को जोड़ सकते हैं। यदि केवल एक अन्य फ़ाइल है, तो कमांड उस फ़ाइल में तुरंत सम्मिलित करता है; यदि एक से अधिक है, तो आपको एक फ़ाइल का चयन करने के लिए कहा जाता है; यदि कोई नहीं है, तो आपको अपनी परियोजना में संपूर्ण फ़ाइलों के लिए संकेत दिया जाता है। आपके द्वारा किसी फ़ाइल का चयन करने के बाद, एक संकेत वर्तमान बफर में सिमेंटिक टैग की एक सूची प्रदान करता है जिसे आप बाद में सम्मिलित करना चुन सकते हैं।
मैंने Emacs Refactor को PR सबमिट किया । पूर्ण कोड यदि आप पीआर की प्रतीक्षा किए बिना प्रयास करना चाहते हैं: यहां क्लिक करें ।
यहाँ एक डेमो है (यह तब शुरू होता है जब आप START DEMO
नीचे देखते हैं ):
आप प्रोटोटाइप की प्रतिलिपि बनाने और कार्य करने के लिए केवल सीनेटर का उपयोग कर सकते हैं। जब तक बिंदु कहीं भी फ़ंक्शन हस्ताक्षर या फ़ंक्शन बॉडी के अंदर है, तब तक चलाएं senator-copy-tag
, जो C-c , M-w
डिफ़ॉल्ट रूप से बाध्य है , यह संपूर्ण फ़ंक्शन की प्रतिलिपि बनाता है: हस्ताक्षर और निकाय दोनों। हालाँकि, आप केवल हस्ताक्षर को चिपका सकते हैं यदि आप कमांड चलाकर चाहते हैं senator-yank-tag
, जो C-c , C-y
डिफ़ॉल्ट रूप से बाध्य है । दबाने C-y
अपने शरीर के साथ-साथ पूरे समारोह हस्ताक्षर पेस्ट करें। senator-copy-tag
यहां तक कि फ़ंक्शन हस्ताक्षर के साथ कई लाइनों पर इस तरह से विस्तार किया गया है:
void
func(int a,
int b,
int c)
{
.....
}
यद्यपि यह दृष्टिकोण सीधे उसी नाम के साथ बफर में सम्मिलित नहीं होता है, यह अन्य मामलों में अधिक लागू होता है। आपका उपयोग मामला केवल तभी काम करता है जब आपके पास एक ही निर्देशिका में दो फ़ाइल हों और एक ही नाम लेकिन अलग-अलग एक्सटेंशन हों। क्या होगा अगर फंक्शन डिक्लेरेशन और फंक्शन डेफिनेशन अलग-अलग नामों के साथ अलग-अलग फाइलों में रहना चाहिए?
EDIT2 : यहाँ सेमेटिक टैग्स का उपयोग करके फंक्शन प्रोटोटाइप के स्मार्ट सम्मिलन के लिए एक उदाहरण दिया गया है। वर्तमान में, आप केवल शीर्ष स्तर के शब्दार्थ टैग के सापेक्ष पदों ("पहले" और "बाद में") के आधार पर सम्मिलित कर सकते हैं। मैं उपयोगकर्ता बनाने के लिए अद्यतन करेगा किसी भी जगह है जहाँ सिमेंटिक टैग उपलब्ध हैं, अधिक पदों के साथ में सम्मिलित करने के लिए सक्षम होने के लिए (यानी जब एक टैग एक है Class
, यह अतिरिक्त पदों की पेशकश करनी चाहिए: public
, projected
और private
)। जब आप START DEMO
नीचे देखते हैं तो डेमो शुरू होता है :
बोनस : यदि आप .cpp
हेडर फ़ाइल से किसी फ़ाइल में रिक्त फ़ंक्शन परिभाषाओं की सूची बनाना चाहते हैं , तो सदस्य-फ़ंक्शन का उपयोग करें । लेकिन जल्द ही, मैं इसे सिमेंटिक + प्रोजेक्टाइल से बदल दूंगा।