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.
{
"id": "org.example.hello",
"name": "Hello (Python)",
"version": "1.0.0",
"apiVersion": 1,
"entry": "python",
"module": "main",
"menus": [
{ "title": "Plugins", "barPriority": 570, "itemPriority": 100 }
]
}
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.exealebopython3.exevo Windows;python3na macOS a Linuxe), alebo - nasmerovaný premennou prostredia
MTE_PYTHON(buď absolútnou cestou kpython.exe, alebo samotným názvom na vyhľadanie vPATH).
- v premennej
- Žiadne balíky pip: klientská knižnica
mtez fázy 1 sa dodáva s editorom a pridá sa za vás dosys.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¶
- Referencia
plugin.json— každé pole a čo robí. - Referencia API
ctx— referencia metódu po metóde pre každú službuctx. - Referencia udalostí — tabuľka téma ↔ dátová trieda.
- Balenie — kam na disku patria priečinky zásuvných modulov.
- Riešenie problémov — ako čítať riadky logu hostiteľa.
- Tvorba s Claudom — kompaktná príručka, ktorú môžete odovzdať asistentovi AI, aby vám zásuvný modul vytvoril.