बनाना मैं कुछ समय के लिए विजुअल स्टूडियो के लिए एक साधारण टेक्स्ट-मैनिपुलेटिंग एक्सटेंशन बनाना चाहता हूं, और अब मुझे अंत में कुछ समय मिल गया है कि एक्सटेंशन कैसे लिखे गए हैं। मेरे मन में जो कुछ है, वह वीबीए मैक्रोज़ के माध्यम से पूरा किया जा सकता है, लेकिन मैं इसे "असली" एक्सटेंशन के रूप में कार्यान्वित करना चाहता हूं; एक सीखने की प्रक्रिया के रूप में, और क्योंकि मैं ईमानदारी से वीबीए नहीं खड़ा कर सकता हूं।एक साधारण टेक्स्ट-मैनिपुलेटिंग विजुअल स्टूडियो 2010 एक्सटेंशन
एक उचित मात्रा में गुगलिंग, ब्लॉग पढ़ने, एमएसडीएन में खोदने और स्टैक ओवरव्लो पोस्ट ब्राउज़ करने के बाद, मुझे लगता है कि मैंने पर्याप्त जानकारी एकत्र की है जिसे मैं इसे कार्यान्वित कर सकता हूं - लेकिन मुझे कुछ फीडबैक चाहिए कि मैं चीजों के करीब आ रहा हूं या नहीं सही इससे पहले कि मैं दूर हैकिंग :)
शुरू मैं क्या करना चाहते है:
- आदेश है कि उपयोगकर्ताओं को के माध्यम से उपकरण> विकल्प> कुंजीपटल करने के लिए बाध्य कर सकते हैं हॉटकी का पंजीयन।
- कमांड लागू होने पर सक्रिय विंडो के टेक्स्ट बफर को संशोधित करें।
- मैं वास्तव में मेनू या टूलबार के बारे में परवाह नहीं है, लेकिन .vsct फ़ाइलों के माध्यम से इसे जोड़ने के लिए कैसे पता (वहाँ बेहतर विकल्प क्या हैं?)
# 1 के लिए, ऐसा लगता है मैं एक पूर्ण VSPackage क्या करना है , .vsct फ़ाइल et cetera - कोई अच्छा और आसान MEF एक्सटेंशन बिंदु नहीं है जिसके बजाय मैं संभाल सकता हूं? (शायद IWpfTextViewCreationListener
निर्यात कर रहे हैं और मैन्युअल कीबोर्ड शॉर्टकट हैंडलिंग के साथ चारों ओर झुकाव - लेकिन यह एक बड़ा हैक होगा)।
# 2 के लिए, मुझे यकीन है कि सक्रिय दस्तावेज़ के लिए ITextBuffer
कैसे प्राप्त करें। मैं DTE.ActiveDocument
के माध्यम से जा सकता हूं, लेकिन मुझे यकीन नहीं है कि ITextBuffer
उस से कैसे प्राप्त करें। वैकल्पिक रूप से, मैं की तर्ज पर कुछ कर सकते हैं ...
var txtMgr = (IVsTextManager)ServiceProvider.GetService(typeof(SVsTextManager));
IVsTextView textViewCurrent;
txtMgr.GetActiveView(true, null, out textView);
IWpfTextView wpfViewCurrent = AdaptersFactory.GetWpfTextView(textView);
ITextBuffer textCurrent = wpfViewCurrent.TextBuffer;
... लेकिन यह है कि यकीन है कि काम करने के एक राउंडअबाउट रास्ता कैसा दिखता है?
धन्यवाद! प्रत्येक VsTextView में एक फ़िल्टर जोड़ने के बारे में कुछ है जो मुझे थोड़ा परेशान करता है, लेकिन समाधान * निश्चित रूप से बेहतर है।बहुत बुरा अभी भी बदसूरत कॉम/ओले विरासत से निपटना है, लेकिन कम से कम यह न्यूनतम है और इसे दूर किया जा सकता है :) – snemarch