2011-07-01 17 views
8

करता है, मैं एक विजुअल स्टूडियो 2010 वीएसआईएक्स एक्सटेंशन बनाना चाहता हूं जो किसी विधि को कॉल के आधार पर कुछ टेक्स्ट फैलाता है (Zen Coding selector-based syntax का उपयोग करके)। आदर्श रूप में, उपयोगकर्ता टेक्स्ट की एक स्ट्रिंग टाइप करेगा, हॉटकी दबाएगा, और पाठ की स्ट्रिंग का विस्तार किया जाएगा।विजुअल स्टूडियो 2010 एक्सटेंशन जो कोड विस्तार

मैंने बहुत सारे नमूने देखे हैं, लेकिन वे सभी पूरी तरह से उभरती भाषा सेवाओं या साधारण सजावट पर ध्यान केंद्रित करते हैं। आदर्श रूप से, मैं एक पूर्ण कामकाजी नमूना खोजना चाहता हूं, लेकिन मैं इंटरफेस/कक्षाओं और कुछ कोड से खुश हूं।

अपडेट::

कुछ संदर्भों मैं को देखा मुझे पता है Resharper और CodeRush बात इस तरह का है कि। यदि संभव हो तो मैं स्टैंड-अलोन प्लगइन के रूप में ऐसा करना चाहता हूं।

+2

स्टेरॉयड पर "कोड स्निपेट" की तरह लगता है। मुझे आश्चर्य है कि क्या ऐसा कुछ है जो आप उस सुविधा से लाभ उठा सकते हैं। –

+0

यदि विस्तार कोडबेस के प्रासंगिक विवरणों पर निर्भर नहीं है, तो शायद एक ऑटोहॉटकी स्क्रिप्ट पर्याप्त होगी। – AakashM

+0

मैंने अभी इस तरह एक एक्सटेंशन जारी किया है .. इसे यहां देखें: http://yngvenilsen.wordpress.com/2011/11/19/zencoding-visual-studio-2010-extension-v1-7/ –

उत्तर

9

ऐसा लगता है कि आप विजुअल स्टूडियो बफर में टेक्स्ट सम्मिलन को चलाने के लिए कीबोर्ड हैंडलिंग करने के तरीके पर एक अच्छा उदाहरण/संदर्भ ढूंढ रहे हैं।

दुर्भाग्यवश यह कोई प्रश्न नहीं है जिसका सीधा जवाब है। विजुअल स्टूडियो में कीबोर्ड हैंडलिंग सबसे जटिल है और बालों को कभी-कभी निराशाजनक लगती है। मैंने इस उत्तर को यथासंभव सरल रखने की कोशिश की है लेकिन दुर्भाग्य से विषय सादगी को खुद को उधार नहीं देता है

शुरू करने के लिए कम से कम 5 अलग-अलग तंत्र हैं जिनके द्वारा विजुअल स्टूडियो कमांड में कुंजीपटल इनपुट रूट करता है।

  • में जाना जाता है दृश्य स्टूडियो के लिए बाध्यकारी आदेशों
  • KeyProcessor वाया (2010 और केवल ऊपर)
  • वाया IVsFilterKeys.TranslateAccelerator (2005 और IIRC ऊपर)
  • वाया IOleCommandTarget
  • Alt कुंजी मानचित्रण (कुछ मैं डॉन ' टी वास्तव में अच्छी तरह से समझ में नहीं आता है)

इनमें से कौन सा आपको हुक करने की आवश्यकता है सह पर निर्भर करता है कारकों का उदय

  • विजुअल स्टूडियो के कौन से संस्करण आप एडिन को कार्य करना चाहते हैं?
  • ऐड-इन आप हो जाएगा निर्माण किस प्रकार: एक वास्तविक ऐड, बनाम पैकेज या VSIX
  • आप कीबोर्ड इनपुट

के लिए लड़ाई जीतने के बारे में कैसे गहराई से ध्यान इनमें से कौन सा आप में हुक करने की जरूरत है इस पर निर्भर करता है कि आप अपने एडिन को कैसे काम करना चाहते हैं और विजुअल स्टूडियो के कौन से संस्करण आप इसे काम करना चाहते हैं। यद्यपि 2 मूल मार्ग हैं जो आप

पहले विजुअल स्टूडियो पैकेज विकसित कर सकते हैं और अपने एक्सटेंशन में प्रत्येक हॉटकी के लिए DTE.Command पंजीकृत कर सकते हैं। इसके बाद आपको अपने आदेशों को संसाधित करने के लिए IOleCommandTargetIVsTextView एस फ़िल्टर श्रृंखला में जोड़ने की आवश्यकता होगी। यह दृष्टिकोण आपको परिदृश्यों में अपनी हॉट कुंजी को संसाधित करने की अनुमति देगा।

दूसरा वीएसआईएक्स विकसित करना है, IOleCommandTargetIVsTextView की चेन में हुक करें और वास्तविक दृश्य स्टूडियो कमांड को रोकें जो आपकी हॉट कुंजी पर मैप करें।

इन दोनों दृष्टिकोणों में उनके अप और डाउन हैं लेकिन मेरा जवाब पहले से ही बहुत लंबा है। यदि आप मुझे कुछ और विवरण दे सकते हैं तो मैं कोशिश कर सकता हूं और आपको एक संक्षिप्त और सहायक उत्तर दे सकता हूं।

उदाहरण के लिए। वीएसवीम विजुअल स्टूडियो के लिए बहुत व्यापक कीबोर्ड हैंडलिंग करता है और मैंने उपर्युक्त उपर्युक्त तरीकों में से किसी एक के लिए एक उदाहरण दिया है।

मुझे पता है जो एक हितों तुम और मैं स्रोत कोड में सही जगह पर आप बात कर सकते हैं।

अतिरिक्त रूप से कीबोर्ड इनपुट के उलझन को समझने पर काम करते हुए मैंने जो कुछ भी सीखा, उसका रिकॉर्ड रखने की कोशिश की। यह तारीख तक पूरी तरह से नहीं है, लेकिन इस दस्तावेज़ कैसे इनपुट कराई हो जाता है की अधिक बुनियादी पहलुओं का वर्णन करता है

संपादित

जॉन टिप्पणी में संकेत दिया VSIX + IOleCommandTarget मार्ग

यह आईएमएचओ सबसे आसान दृष्टिकोण है। हालांकि, एक बात यह जानना है कि कमांड बाइंडिंग IOleCommandTarget श्रृंखला को पारित करने वाले डेटा को कैसे प्रभावित करती है। IOleCommandTarget श्रृंखला में डेटा पास होने से पहले विजुअल स्टूडियो कमांड बाध्यकारी होता है। इसलिए यदि कोई दिया गया इनपुट इनपुट कमांड के लिए बाध्य है तो इसे IOleCommandTarget को कमांड के रूप में और कीबोर्ड इनपुट नहीं दिया जाएगा।

उदाहरण के लिए CTRL-Z आमतौर पर विजुअल स्टूडियो Undo कमांड पर मैप किया गया है। यदि उपयोगकर्ता CTRL-Z हिट करता है तो IOleCommandTarget अंडो कमांड देखेंगे और कीबोर्ड इनपुट CTRL-Z नहीं होगा।IOleCommandTarget

  • OleCommandUtil का नमूना कार्यान्वयन:

    यहाँ कुछ नमूने आप

    • VsCommandTarget को देख में रुचि हो सकती हैं डेटा वास्तविक आदेश और कीबोर्ड इनपुट
    • में IOleCommandTarget में पारित कर दिया कन्वर्ट करने के लिए प्रयोग किया जाता है HostFactory: विवरण VSIX एक्सटेंशन से को IVsTextView में वास्तव में कैसे हुकअप करें।
  • +0

    धन्यवाद! मैं विजुअल स्टूडियो को ज़ेन कोडिंग समर्थन जोड़ना चाहता हूं, अधिमानतः वीएसआईएक्स के रूप में। यहां एक अवलोकन है: http://coding.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/ - ऐसा लगता है कि IOleCommandTarget IVsTextView के साथ काम करेगा? ज़ेन कोडिंग जावास्क्रिप्ट में लिखा गया है, सोच रहा हूं कि मैं उसमें .NET जावास्क्रिप्ट इत्यादि जैसे आयरनजेस/जुरासिक का उपयोग कर कॉल कर सकता हूं। –

    +0

    @ जोन मैंने उस परिदृश्य पर थोड़ी अधिक जानकारी रखने के लिए अपना उत्तर अपडेट किया। अगर आपको किसी अन्य जानकारी की ज़रूरत है तो कृपया मुझे बताएं – JaredPar

    1

    मैं रीशेर्पर के लाइव टेम्पलेट्स पर निर्माण करना चाहता हूं। आप सरल भरने-इन-द-रिक्त स्थान से विस्तार को अधिक बुद्धिमान बनाने के लिए मैक्रोज़ के साथ बहुत कुछ कर सकते हैं। मैं उस क्षेत्र में एक विशेषज्ञ नहीं हूं, लेकिन मैंने इस तरह से बनाए गए कुछ परिष्कृत टेम्पलेट्स को देखा है।

    संबंधित मुद्दे