Preskočiť na obsah

Zásuvné moduly v Pythone

Modular Text Editor načítava zásuvné moduly v Pythone popri natívnych moduloch v C++ cez tú istú plochu na správu modulov. Zásuvný modul v Pythone je priečinok obsahujúci jeden plugin.json a aspoň jeden súbor .py s funkciou register(ctx) na najvyššej úrovni.

Editor spustí pre každý modul malý pracovný podproces, vnútri neho zavolá register(ctx) a príkazy, ponuky a udalosti prenáša cez kanál RPC. Váš zásuvný modul sa nikdy nedotkne Qt ani Scintilly — objekt ctx je obyčajný lokátor služieb v Pythone.

Čo dnes funguje (fázy 1 – 5: funkčne kompletné)

Fáza 1: príkazy, položky ponuky, odbery udalostí (otvorenie/zatvorenie/uloženie/zmena aktívneho dokumentu/zmena výberu/ukončenie aplikácie), log, stavový riadok.

Fáza 2: buffer editora, výber, kurzor, hľadanie, odsadenie a operácie so súbormi cez ctx.editor.*, trvalé nastavenia cez ctx.settings.* a nastavenia aplikácie iba na čítanie cez ctx.app_settings.*, poskytovatelia dopĺňania (s krátkym termínom na stlačenie klávesu) cez @ctx.completions.provider(...) a ctx.data_dir() pre zapisovateľný priečinok daného modulu.

Fáza 3: deklaratívne ukotviteľné panely cez ctx.docks.add_panel(...), stránky Predvolieb cez ctx.settings_page.register(...), obidve zostavené pomocou tvorcov formulárov mte.ui, a prístup k ovládacím prvkom za behu cez ctx.ui.get a ctx.ui.set.

Fáza 4: inštalátor balíkov .mteplugin — zabaľte priečinok svojho modulu do zipu a nainštalujte ho z Predvolieb → Zásuvné moduly (pozri Balenie).

Fáza 5: virtuálne prostredia pre jednotlivé moduly — deklarujte závislosti pip v poli pyRequires a editor pri prvom spustení pre váš modul pripraví virtuálne prostredie (pozri Závislosti); deklarácia permissions zobrazená na stránke Zásuvné moduly; a podklad RPC s prúdením a rušením (zatiaľ bez API smerom k zásuvným modulom — stojí na ňom budúce služby AI).

Minimálny zásuvný modul

Vytvorte <any-folder>/hello/ s týmito dvoma súbormi.

hello/plugin.json
{
  "id":         "org.example.hello",
  "name":       "Hello (Python)",
  "version":    "1.0.0",
  "apiVersion": 1,
  "entry":      "python",
  "module":     "main",
  "menus": [
    { "title": "Plugins", "barPriority": 570, "itemPriority": 100 }
  ]
}
hello/main.py
import mte  # noqa: F401


def register(ctx):

    @ctx.commands.command(id="hello.sayHi",
                          title="Say Hi",
                          shortcut="Ctrl+Alt+H")
    def _say_hi():
        ctx.status.show("Hello from Python!", timeout_ms=3000)
        ctx.log.info("hello: Say Hi invoked")

    ctx.menus.add_item("Plugins/Hello/Say Hi", "hello.sayHi")

Priečinok zabaľte do zipu ako hello.mteplugin a nainštalujte ho cez Predvoľby → Zásuvné moduly → Nainštalovať zásuvný modul... — prípadne priečinok ručne vložte do svojho používateľského priečinka zásuvných modulov (pozri Balenie). Reštartujte editor a v paneli ponuky sa objaví Plugins → Hello → Say Hi.

Čo potrebujete na počítači

  • Interpret Pythonu 3.9+ dostupný jedným z dvoch spôsobov:
    • v premennej PATH (py.exe, python.exe alebo python3.exe vo Windows; python3 na macOS a Linuxe), alebo
    • nasmerovaný premennou prostredia MTE_PYTHON (buď absolútnou cestou k python.exe, alebo samotným názvom na vyhľadanie v PATH).
  • Žiadne balíky pip: klientská knižnica mte z fázy 1 sa dodáva s editorom a pridá sa za vás do sys.path.

Editor pri spustení zaznamená, ktorý interpret zvolil:

PluginHost: MTE_PYTHON is not set; falling back to PATH.
PluginHost: located Python on PATH: py.exe -> C:/Windows/py.exe
PluginHost: Python plugin backend enabled; interpreter=..., worker=.../mte_python_host.py

Ak vidíte Python plugins disabled, prejdite na Riešenie problémov.

Čo váš zásuvný modul dokáže

Každá položka nižšie odkazuje na svoju sekciu API:

Schopnosť Sekcia
Registrácia príkazov (s voliteľnou klávesovou skratkou) ctx.commands
Prispievanie položkami ponuky a oddeľovačmi ctx.menus
Odber každej udalosti editora (dokumenty, text, výber, nastavenia, motív, pracovný priestor, …) a zverejňovanie tých z pracovného priestoru ctx.events a Referencia udalostí
Zápis do diagnostického prúdu editora ctx.log
Odosielanie dočasných správ do stavového riadka, vlastníctvo trvalého segmentu stavového riadka ctx.status
Čítanie a úprava bufferov, výberov (aj s viacerými kurzormi), kurzora, súborov, hľadania, záložiek, označení, zvýrazňovania URL, odsadenia a skupín rozdeleného zobrazenia ctx.editor
Výpis jazykov, čítanie a prepínanie jazyka dokumentu, prispievanie definíciou jazyka ctx.languages
Uchovávanie konfigurácie modulu, čítanie nastavení celej aplikácie (mte.keys), čítanie nastavení dokumentu vo vrstvách so .editorconfig ctx.settings / ctx.app_settings / ctx.document_settings
Zverejňovanie diagnostiky (vlnovky a značky na okraji) ctx.diagnostics
Registrácia farieb z motívu pre vaše vlastné rozhranie ctx.theme
Otvorenie zobrazenia porovnania vedľa seba ctx.compare
Registrácia poskytovateľa dopĺňania (s termínom na stlačenie klávesu) ctx.completions
Nájdenie vášho zapisovateľného priečinka pre daný modul ctx.data_dir()
Pridanie deklaratívneho ukotviteľného panela, jeho zobrazenie či skrytie z príkazu ctx.docks a mte.ui
Pridanie stránky do Predvolieb ctx.settings_page
Čítanie a zápis ovládacích prvkov panela za behu ctx.ui
Prepnutie trvalej značky začiarknutia pri položke ponuky ctx.menus.set_item_checked
Zosivenie položky ponuky, kým sa jej príkaz nedá spustiť ctx.menus.set_item_enabled

Čo ďalej