2012-10-19 72 views
6

Tôi đang trong quá trình tìm hiểu cách tạo plugin Sublime Text 2. Một trong những điều tôi muốn làm là lấy bất kỳ văn bản nào được đánh dấu, kiểm tra xem một trang web có trả lại 200 tại địa chỉ đó không và sau đó đặt một số thông tin vào bảng điều khiển nhanh (và có, tôi biết rằng tôi nên làm url tra cứu trong một chuỗi sao cho nó không chặn giao diện người dùng chính). Hiện nay tôi có:Truy cập Quick Panel trong Plugin Sublime Text 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 

Các lỗi tôi nhận được là:

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) 

Vấn đề là tôi không biết làm thế nào để khởi tạo lớp WindowCommand một cách chính xác, và tôi dường như không thể tìm thấy bất kỳ tài liệu về nó. Bất kỳ trợ giúp hoặc gợi ý nào ở đây sẽ được đánh giá cao.

Trả lời

12

Bạn không cần phải tạo một phiên bản khác của WindowCommand để thực hiện việc này. Btw, bạn thường viết các lệnh nhưng không tạo ra các cá thể của chúng trong các plugin của bạn. Chúng được khởi tạo và được gọi thông qua các ràng buộc chính hoặc phương thức của View/Window/sublime theo phương thức run_command.

Bạn có thể nhận cửa sổ hiện tại đang hoạt động bên trong trình xử lý lệnh check_urls và hiển thị bảng điều khiển nhanh.

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

Đây là một nguồn đầy đủ:

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

Bạn là chính xác. Tôi đã tìm ra điều này trong khoảng 20 phút sau khi tôi đăng tiền thưởng, nhưng tôi đánh giá cao câu trả lời kỹ lưỡng của bạn bất kể. Cảm ơn bạn! (Tôi sẽ trao tiền thưởng ngay khi SO cho phép tôi) –

Các vấn đề liên quan