ऐसा लगता है कि आप विजुअल स्टूडियो बफर में टेक्स्ट सम्मिलन को चलाने के लिए कीबोर्ड हैंडलिंग करने के तरीके पर एक अच्छा उदाहरण/संदर्भ ढूंढ रहे हैं।
दुर्भाग्यवश यह कोई प्रश्न नहीं है जिसका सीधा जवाब है। विजुअल स्टूडियो में कीबोर्ड हैंडलिंग सबसे जटिल है और बालों को कभी-कभी निराशाजनक लगती है। मैंने इस उत्तर को यथासंभव सरल रखने की कोशिश की है लेकिन दुर्भाग्य से विषय सादगी को खुद को उधार नहीं देता है
शुरू करने के लिए कम से कम 5 अलग-अलग तंत्र हैं जिनके द्वारा विजुअल स्टूडियो कमांड में कुंजीपटल इनपुट रूट करता है।
इनमें से कौन सा आपको हुक करने की आवश्यकता है सह पर निर्भर करता है कारकों का उदय
- विजुअल स्टूडियो के कौन से संस्करण आप एडिन को कार्य करना चाहते हैं?
- ऐड-इन आप हो जाएगा निर्माण किस प्रकार: एक वास्तविक ऐड, बनाम पैकेज या VSIX
- आप कीबोर्ड इनपुट
के लिए लड़ाई जीतने के बारे में कैसे गहराई से ध्यान इनमें से कौन सा आप में हुक करने की जरूरत है इस पर निर्भर करता है कि आप अपने एडिन को कैसे काम करना चाहते हैं और विजुअल स्टूडियो के कौन से संस्करण आप इसे काम करना चाहते हैं। यद्यपि 2 मूल मार्ग हैं जो आप
पहले विजुअल स्टूडियो पैकेज विकसित कर सकते हैं और अपने एक्सटेंशन में प्रत्येक हॉटकी के लिए DTE.Command
पंजीकृत कर सकते हैं। इसके बाद आपको अपने आदेशों को संसाधित करने के लिए IOleCommandTarget
IVsTextView
एस फ़िल्टर श्रृंखला में जोड़ने की आवश्यकता होगी। यह दृष्टिकोण आपको परिदृश्यों में अपनी हॉट कुंजी को संसाधित करने की अनुमति देगा।
दूसरा वीएसआईएक्स विकसित करना है, IOleCommandTarget
IVsTextView
की चेन में हुक करें और वास्तविक दृश्य स्टूडियो कमांड को रोकें जो आपकी हॉट कुंजी पर मैप करें।
इन दोनों दृष्टिकोणों में उनके अप और डाउन हैं लेकिन मेरा जवाब पहले से ही बहुत लंबा है। यदि आप मुझे कुछ और विवरण दे सकते हैं तो मैं कोशिश कर सकता हूं और आपको एक संक्षिप्त और सहायक उत्तर दे सकता हूं।
उदाहरण के लिए। वीएसवीम विजुअल स्टूडियो के लिए बहुत व्यापक कीबोर्ड हैंडलिंग करता है और मैंने उपर्युक्त उपर्युक्त तरीकों में से किसी एक के लिए एक उदाहरण दिया है।
मुझे पता है जो एक हितों तुम और मैं स्रोत कोड में सही जगह पर आप बात कर सकते हैं।
अतिरिक्त रूप से कीबोर्ड इनपुट के उलझन को समझने पर काम करते हुए मैंने जो कुछ भी सीखा, उसका रिकॉर्ड रखने की कोशिश की। यह तारीख तक पूरी तरह से नहीं है, लेकिन इस दस्तावेज़ कैसे इनपुट कराई हो जाता है की अधिक बुनियादी पहलुओं का वर्णन करता है
संपादित
जॉन टिप्पणी में संकेत दिया VSIX + IOleCommandTarget
मार्ग
यह आईएमएचओ सबसे आसान दृष्टिकोण है। हालांकि, एक बात यह जानना है कि कमांड बाइंडिंग IOleCommandTarget
श्रृंखला को पारित करने वाले डेटा को कैसे प्रभावित करती है। IOleCommandTarget
श्रृंखला में डेटा पास होने से पहले विजुअल स्टूडियो कमांड बाध्यकारी होता है। इसलिए यदि कोई दिया गया इनपुट इनपुट कमांड के लिए बाध्य है तो इसे IOleCommandTarget
को कमांड के रूप में और कीबोर्ड इनपुट नहीं दिया जाएगा।
उदाहरण के लिए CTRL-Z
आमतौर पर विजुअल स्टूडियो Undo
कमांड पर मैप किया गया है। यदि उपयोगकर्ता CTRL-Z
हिट करता है तो IOleCommandTarget
अंडो कमांड देखेंगे और कीबोर्ड इनपुट CTRL-Z
नहीं होगा।IOleCommandTarget
OleCommandUtil का नमूना कार्यान्वयन: यहाँ कुछ नमूने आप
- VsCommandTarget को देख में रुचि हो सकती हैं डेटा वास्तविक आदेश और कीबोर्ड इनपुट
- में
IOleCommandTarget
में पारित कर दिया कन्वर्ट करने के लिए प्रयोग किया जाता है HostFactory: विवरण VSIX एक्सटेंशन से को IVsTextView
में वास्तव में कैसे हुकअप करें।
स्टेरॉयड पर "कोड स्निपेट" की तरह लगता है। मुझे आश्चर्य है कि क्या ऐसा कुछ है जो आप उस सुविधा से लाभ उठा सकते हैं। –
यदि विस्तार कोडबेस के प्रासंगिक विवरणों पर निर्भर नहीं है, तो शायद एक ऑटोहॉटकी स्क्रिप्ट पर्याप्त होगी। – AakashM
मैंने अभी इस तरह एक एक्सटेंशन जारी किया है .. इसे यहां देखें: http://yngvenilsen.wordpress.com/2011/11/19/zencoding-visual-studio-2010-extension-v1-7/ –