Přeskočit obsah

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.

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")

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.exe nebo python3.exe ve Windows; python3 na macOS a v Linuxu), nebo
    • nasměrovaný proměnnou prostředí MTE_PYTHON (buď absolutní cestou k python.exe, nebo holým názvem k dohledání v PATH).
  • Žádné balíčky pip: klientská knihovna mte z fáze 1 se dodává s editorem a do sys.path se 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