Zásuvné moduly v Pythonu¶
Modular Text Editor načítá zásuvné moduly v Pythonu po boku nativních v C++ přes tutéž plochu pro
správu modulů. Modul v Pythonu je složka obsahující jeden plugin.json a alespoň jeden soubor
.py s funkcí register(ctx) na nejvyšší úrovni.
Editor spustí na každý modul malý podproces pracovníka, uvnitř něj spustí register(ctx) a
příkazy, nabídky i události přenáší přes kanál RPC. Váš modul se nikdy nedotkne Qt ani Scintilly —
objekt ctx je obyčejný lokátor služeb v Pythonu.
Co dnes funguje (fáze 1–5: funkčně kompletní)
Fáze 1: příkazy, položky nabídek, odběry událostí (otevření / zavření / uložení / změna aktivního dokumentu / změna výběru / ukončení aplikace), protokol, stavový řádek.
Fáze 2: buffer editoru, výběr, kurzor, hledání, odsazení a operace se soubory přes
ctx.editor.*, trvalá nastavení přes ctx.settings.* a nastavení aplikace jen ke čtení
přes ctx.app_settings.*, poskytovatelé dokončování (s krátkým termínem na stisk
klávesy) přes @ctx.completions.provider(...) a ctx.data_dir() pro zapisovatelný adresář
daného modulu.
Fáze 3: deklarativní ukotvitelné panely přes ctx.docks.add_panel(...), stránky
Předvoleb přes ctx.settings_page.register(...), obojí postavené z
stavitelů formulářů mte.ui, a přístup k ovládacím prvkům za běhu přes
ctx.ui.get / ctx.ui.set.
Fáze 4: instalátor balíčků .mteplugin — složku svého modulu zazipujte a nainstalujte z
Předvolby → Zásuvné moduly (viz Balení).
Fáze 5: virtuální prostředí pro každý modul — deklarujte závislosti pip v pyRequires a
editor pro váš modul při prvním spuštění venv připraví (viz
Závislosti); deklarace permissions zobrazená na
stránce Zásuvné moduly; a podklad RPC s proudy a rušením (zatím bez rozhraní obráceného k
modulům — je základem budoucích služeb AI).
Minimální zásuvný modul¶
Vytvořte <any-folder>/hello/ s těmito dvěma soubory.
{
"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")
Složku zazipujte jako hello.mteplugin a nainstalujte přes
Předvolby → Zásuvné moduly → Instalovat zásuvný modul... — nebo složku ručně vložte do svého uživatelského
adresáře modulů (viz Balení). Restartujte editor a v nabídkové liště se objeví
Plugins → Hello → Say Hi.
Co potřebujete na stroji¶
- Interpret Pythonu 3.9+ dosažitelný jedním ze dvou způsobů:
- v
PATH(py.exe,python.exenebopython3.exeve Windows;python3na macOS a v Linuxu), nebo - nasměrovaný proměnnou prostředí
MTE_PYTHON(buď absolutní cestou kpython.exe, nebo holým názvem k dohledání vPATH).
- v
- Žádné balíčky pip: klientská knihovna
mtez fáze 1 se dodává s editorem a dosys.pathse přidá za vás.
Editor při spuštění zaznamená, který 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
Vidíte-li Python plugins disabled, skočte na Řešení potíží.
Co váš zásuvný modul umí¶
Každá položka níže odkazuje na svou část rozhraní:
| Schopnost | Část |
|---|---|
| Registrace příkazů (s volitelnou klávesovou zkratkou) | ctx.commands |
| Přispění položkami nabídek a oddělovači | ctx.menus |
| Odběr každé události editoru (dokumenty, text, výběr, nastavení, motiv, pracovní prostor, …) a publikování těch o pracovním prostoru | ctx.events a reference událostí |
| Zápis do diagnostického proudu editoru | ctx.log |
| Posílání pomíjivých zpráv do stavového řádku, vlastnictví trvalé části stavového řádku | ctx.status |
| Čtení a úprava bufferů, výběrů (včetně více kurzorů), kurzoru, souborů, hledání, záložek, označení, zvýrazňování URL, odsazení, skupin rozděleného zobrazení | ctx.editor |
| Výpis jazyků, čtení a přepínání jazyka dokumentu, přispění definicí jazyka | ctx.languages |
Uchovávání konfigurace modulu, čtení nastavení celé aplikace (mte.keys), čtení nastavení dokumentu s vrstvami z .editorconfig |
ctx.settings / ctx.app_settings / ctx.document_settings |
| Publikování diagnostiky (vlnovky a značky na okraji) | ctx.diagnostics |
| Registrace barev z motivu pro vaše vlastní rozhraní | ctx.theme |
| Otevření zobrazení porovnání vedle sebe | ctx.compare |
| Registrace poskytovatele dokončování (s termínem na stisk klávesy) | ctx.completions |
| Nalezení vašeho zapisovatelného adresáře modulu | ctx.data_dir() |
| Přidání deklarativního ukotvitelného panelu, jeho odkrytí a skrytí z příkazu | ctx.docks a mte.ui |
| Přidání stránky do Předvoleb | ctx.settings_page |
| Čtení a zápis ovládacích prvků panelu za běhu | ctx.ui |
| Přepínání trvalého zaškrtnutí u položky nabídky | ctx.menus.set_item_checked |
| Zašednutí položky nabídky, dokud její příkaz nemůže běžet | ctx.menus.set_item_enabled |
Co dál¶
- Reference
plugin.json— každé pole a co dělá. - Reference rozhraní
ctx— reference metodu po metodě pro každou službuctx. - Reference událostí — tabulka téma ↔ dataclass.
- Balení — kam na disk patří složky modulů.
- Řešení potíží — jak číst řádky protokolu hostitele.
- Psaní s Claudem — úsporný průvodce, který můžete předat asistentovi AI, aby pro vás modul vytvořil.