Dodatek za vstavljanje URL naslovov (Sublime Text)


Že dolgo sem si želel spisati uporaben dodatek za super awesome urejevalnik Sublime Text in končno je prišel čas tudi za to. Dodatek služi za hitrejše/lažje vstavljanju URL naslovov različnih knjižnic v datoteko.

Primer uporabe: odločiš se razviti spletno aplikacijo, ki bo uporabljala knjižnico jQuery (ali katerokoli drugo). Namesto, da greš na Google in poguglaš za URL naslovom knjižnice, v urejevalniku preprosto pritisneš kombinacijo tipk, ki aktivira meni, iz katerega potem izbereš jQuery knjižnico. Ob izbiri knjižnice se URL knjižnice vstavi na mesto, kjer je kazalka.

Glavna koda dodatka se nahaja v insert_url.py (v mapi Packages ).

import sublime
import json
import sublime_plugin

class InsertUrlCommand(sublime_plugin.TextCommand):

    def __init__(self, *args, **kwargs):
        super(InsertUrlCommand, self).__init__(*args, **kwargs)

        self.filename = sublime.packages_path() + '/Insert URL/InsertURL.sublime-settings'
        self.urls = []

        try:
            with open(self.filename, 'r') as f:
                for name, url in json.load(f).items():
                    self.urls.append([name, url])
                self.urls.sort()
        except:
            pass

    def run(self, edit):
        window = sublime.active_window()
        if self.urls:
            window.show_quick_panel(self.urls, self.paste_url, sublime.MONOSPACE_FONT)
        else:
            sublime.error_message('Unfortunately, there are no URL addresses to show. Why not adding some?')
            window.open_file(self.filename)

    def paste_url(self, i):
        pos = self.view.sel()[0].begin()
        url = self.urls[i][1]
        self.view.run_command('paste_url', dict(i=pos, r=range(len(self.urls)), url=url))

class PasteUrlCommand(sublime_plugin.TextCommand):
    def run(self, edit, i, r, url):
        if i in r: self.view.insert(edit, i, url)

Pripravil sem tudi že nekaj privzetih (parov ime knjižnice – URL naslov knjižnice), ki se nahaja v datoteki InsertURL.sublime-commands (v isti mapi).

{
    "jQuery": "http//code.jquery.com/jquery-latest.js",
    "Twitter Bootstrap CSS": "http//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css",
    "Twitter Bootstrap JS": "http//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js",
    "Normalize": "https://raw.github.com/necolas/normalize.css/master/normalize.css"
}

Dodatek je testiran na ST3, delovati pa bi moral tudi na starejši verziji ST. Za dodajanje novih knjižnic je le-te potrebno dodati v izvorno kodo dodatka. V Preferences > Key Bindings - User je potrebno dodati še vnos, ki na pritisk bližnjice sproži izvajanje dodatka. Npr.:

{ "keys": ["ctrl+i", "i"], "command": "insert_url" },

 (pritisk na ctrl+i, ki mu sledi pritisk na i)

Za konec sem dodal še dva ukaza v hitrem meniju (ta, ki ga dobiš s ctrl+shift+p ) v isto mapo.

[
    {
        "caption": "Insert URL: Insert",
        "command": "insert_url",
    },
    {
        "caption": "Insert URL: Manage",
        "command": "open_file", "args":
        {
            "file": "${packages}/Insert URL/InsertURL.sublime-settings"
        }
    }
]