6

Sublime Text 2 プラグインの作成方法を学習中です。私がやりたいことの 1 つは、強調表示されたテキストを取得し、そのアドレスで Web サイトが 200 を返すかどうかを確認し、クイック パネルにいくつかの情報を配置することです (はい、URL を実行する必要があることはわかっています)。メイン UI をブロックしないようにスレッドでルックアップします)。現在私は持っています:

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 クラスを正しく初期化する方法がわからず、それに関するドキュメントが見つからないことです。ここでの助けやヒントは大歓迎です。

4

1 に答える 1

12

これを行うために の別のインスタンスを作成する必要はありませんWindowCommand。ところで、通常はコマンドを記述しますが、プラグインでそれらのインスタンスを作成しません。これらは、キー バインドまたはrun_commandView/Window/sublime のメソッドを介してインスタンス化され、呼び出されます。

check_urlsコマンド ハンドラー内で現在アクティブなウィンドウを取得し、クイック パネルを表示できます。

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

完全なソースは次のとおりです。

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
于 2012-10-22T14:01:08.127 に答える