2012-10-19 7 views
6

サブライムテキスト2プラグインを作成する方法を学習中です。私がしたいことの1つは、強調表示されたテキストを取り、Webサイトがそのアドレスに200を返すかどうかを確認して、クイックパネルに情報を入力することです(はい、私はURLメインUIをブロックしないようにスレッドでルックアップする)。現在、私は持っている:サブライムテキスト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の別のインスタンスを作成する必要はありません。 Btwでは、通常はコマンドを書きますが、プラグインでインスタンスを作成しないでください。それらは、キーバインドまたはビュー/ウィンドウ/昇華の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分後にこれを理解しましたが、あなたの徹底的な答えには無関係に感謝します。ありがとうございました! (そうすればすぐに賞金が授与されます) –

関連する問題