2012-10-19 16 views
6

में त्वरित पैनल तक पहुंचने से मैं सीखने की प्रक्रिया में हूं कि सब्लिमे टेक्स्ट 2 प्लगइन्स कैसे बनाएं। उन चीजों में से एक जो मैं करना चाहता हूं वह किसी भी हाइलाइट किए गए टेक्स्ट को ले लें, जांचें कि कोई वेबसाइट उस पते पर 200 लौटाएगी, और फिर कुछ जानकारी त्वरित पैनल में रखेगी (और हाँ, मुझे पता है कि मुझे यूआरएल करना चाहिए एक थ्रेड में लुकअप ताकि वह मुख्य यूआई को अवरुद्ध न करे)। वर्तमान में मेरे पास है:एक शानदार पाठ 2 प्लगइन

import sublime 
import sublime_plugin 
import urllib2 

class CheckUrlPanel(sublime_plugin.WindowCommand): 

def quick_panel(self, messages, flags): 
    self.window.show_quick_panel(messages, None, flags) 

class CheckUrlsCommand(sublime_plugin.TextCommand): 

def run(self, edit): 
    urls = [] 
    selections = self.view.sel() 
    for selection in selections: 
     urls.append(self.view.substr(selection)) 

    messages = self.validate_urls(urls) 
    panel = CheckUrlPanel() 
    panel.quick_panel(messages, sublime.MONOSPACE_FONT) 

def validate_urls(self, urls): 
    messages = [] 
    for url in urls: 
     try: 
      request = urllib2.Request(url, headers={ "User-Agent" : "Sublime URL Checker" }) 
      response = urllib2.urlopen(request, timeout=3) 
      message = '"%s" is a valid URL.' % url 
     except Exception as (e): 
      message = '"%s" is an invalid URL.' % url 

     messages.append(message) 

    return messages 

त्रुटि मैं मिलता है:

Traceback (most recent call last): 
File "./sublime_plugin.py", line 362, in run_ 
File "./CheckUrls.py", line 19, in run 
    panel = CheckUrlPanel() 
    TypeError: __init__() takes exactly 2 arguments (1 given) 

समस्या मैं कैसे WindowCommand वर्ग को सही ढंग से प्रारंभ करने में नहीं पता है कि, और मैं किसी भी खोजने के लिए नहीं कर पा रहे है इस पर प्रलेखन। यहां कोई मदद या संकेत बहुत सराहना की जाएगी।

उत्तर

12

इसे पूरा करने के लिए आपको WindowCommand का एक और उदाहरण बनाने की आवश्यकता नहीं है। बीटीडब्ल्यू, आप आमतौर पर कमांड लिखते हैं लेकिन अपने प्लगइन में अपने उदाहरण नहीं बनाते हैं। उन्हें तुरंत बाइंडिंग या run_command व्यू/विंडो/सब्लिमे की विधि के माध्यम से तत्काल और बुलाया जाता है।

आप अपने check_urls कमांड हैंडलर के अंदर वर्तमान सक्रिय विंडो प्राप्त कर सकते हैं और एक त्वरित पैनल प्रदर्शित कर सकते हैं।

import sublime 
import sublime_plugin 
import urllib 
from urllib.request import urlopen 

class CheckUrlsCommand(sublime_plugin.TextCommand): 

    def run(self, edit): 
     urls = [] 
     selections = self.view.sel() 
     for selection in selections: 
     urls.append(self.view.substr(selection)) 

     messages = self.validate_urls(urls) 
     window = sublime.active_window() 
     window.show_quick_panel(messages, None, sublime.MONOSPACE_FONT) 

    def validate_urls(self, urls): 
     messages = [] 
     for url in urls: 
     try:     
      response = urlopen(request, timeout=3) 
      message = '"%s" is a valid URL.' % url 
     except Exception as e: 
      message = '"%s" is an invalid URL.' % url 

     messages.append(message) 

     return messages 
+1

आप सही कर रहे हैं:

window = sublime.active_window() window.show_quick_panel(messages, None, sublime.MONOSPACE_FONT) 

यहाँ एक पूर्ण स्रोत है। मैंने बकाया पोस्ट करने के लगभग 20 मिनट बाद इसे समझ लिया, लेकिन मैं आपके पूर्ण जवाब की सराहना करता हूं। धन्यवाद! (जैसे ही एसओ मुझे देता है मैं इनाम का पुरस्कार दूंगा) –

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