2012-10-19 12 views
6

Jestem w trakcie nauki tworzenia wtyczek Sublime Text 2. Jedną z rzeczy, które chciałbym zrobić, to wziąć zaznaczony tekst, sprawdzić, czy strona internetowa zwróci 200 pod tym adresem, a następnie umieścić niektóre informacje w szybkim panelu (i tak, wiem, że powinienem robić adres URL wyszukiwanie w wątku, aby nie blokował głównego interfejsu użytkownika). Obecnie mam:Uzyskiwanie dostępu do Szybkiego panelu w sublime Text 2 Plugin

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 

Błąd pojawia się:

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) 

Problem polega na tym, że nie wiem jak poprawnie zainicjować klasę WindowCommand, a ja nie potrafię znaleźć żadnego dokumentacja na ten temat. Każda pomoc lub wskazówki tutaj będą mile widziane.

Odpowiedz

12

Aby to wykonać, nie trzeba tworzyć kolejnego wystąpienia WindowCommand. Przy okazji zwykle piszesz polecenia, ale nie tworzysz ich instancji w swoich wtyczkach. Są one tworzone i wywoływane za pomocą powiązań klawiszy lub metody View/Window/sublime.

Możesz uzyskać aktualne aktywne okno wewnątrz programu obsługi check_urls i wyświetlić szybki panel.

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

Oto pełna źródło:

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

Jesteś poprawne. Pomyślałem o tym około 20 minut po tym, jak opublikowałem nagrodę, ale doceniam twoją dokładną odpowiedź, niezależnie od tego. Dziękuję Ci! (Nagrodzę nagrodę tak szybko, jak pozwoli mi na to SO) –