Gå til indholdet

Python-udvidelsesmoduler

Modular Text Editor indlæser Python-udvidelsesmoduler side om side med indbyggede C++-moduler gennem den samme flade til håndtering af udvidelsesmoduler. Et Python-udvidelsesmodul er en mappe, der indeholder én plugin.json og mindst én .py-fil med en register(ctx)-funktion på øverste niveau.

Editoren starter en lille arbejderunderproces pr. udvidelsesmodul, kører register(ctx) inde i den og sender kommandoer, menuer og hændelser frem og tilbage over en RPC-kanal. Dit udvidelsesmodul rører aldrig Qt eller Scintilla — ctx-objektet er et almindeligt Python-tjenestekatalog.

Hvad der virker i dag (fase 1–5: funktionelt fuldstændigt)

Fase 1: kommandoer, menupunkter, hændelsesabonnementer (åbn / luk / gem / aktivt dokument ændret / markering ændret / programmet afslutter), loggen og statuslinjen.

Fase 2: editorbuffer, markering, markør, søgning, indrykning og filhandlinger via ctx.editor.*, vedvarende indstillinger via ctx.settings.* og skrivebeskyttede programindstillinger via ctx.app_settings.*, fuldførelsesleverandører (med en kort frist pr. tastetryk) via @ctx.completions.provider(...) og ctx.data_dir() til den skrivbare mappe pr. udvidelsesmodul.

Fase 3: deklarative dokpaneler via ctx.docks.add_panel(...), indstillingssider via ctx.settings_page.register(...), begge bygget af mte.ui-formularbyggere, og adgang til kontroller under kørslen via ctx.ui.get / ctx.ui.set.

Fase 4: installationsprogram til .mteplugin-pakker — pak din modulmappe som en zip, og installér den fra Indstillinger → Udvidelsesmoduler (se Pakning).

Fase 5: virtuelle miljøer pr. udvidelsesmodul — erklær pip-afhængigheder i pyRequires, og editoren sætter et virtuelt miljø op til dit modul ved første start (se Afhængigheder); en permissions-erklæring, der vises på udvidelsesmodulsiden; og et RPC-underlag med strømning og afbrydelse (endnu ingen API for udvidelsesmoduler — det ligger til grund for fremtidige AI-tjenester).

Et minimalt udvidelsesmodul

Opret <any-folder>/hello/ med disse to filer.

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

Pak mappen som en zip ved navn hello.mteplugin, og installér den via Indstillinger → Udvidelsesmoduler → Installér udvidelsesmodul... — eller læg mappen i din udvidelsesmodulmappe pr. bruger i hånden (se Pakning). Genstart editoren, og Plugins → Hello → Say Hi kommer frem på menulinjen.

Hvad du skal have på maskinen

  • En Python 3.9+-fortolker, der kan nås på en af to måder:
    • i PATH (py.exe, python.exe eller python3.exe på Windows; python3 på macOS og Linux), eller
    • udpeget af miljøvariablen MTE_PYTHON (enten en absolut sti til en python.exe eller blot et navn at slå op i PATH).
  • Ingen pip-pakker: klientbiblioteket mte fra fase 1 følger med editoren og føjes til sys.path for dig.

Editoren noterer ved opstart, hvilken fortolker den valgte:

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

Ser du Python plugins disabled, så gå til Fejlfinding.

Hvad dit udvidelsesmodul kan

Hvert punkt nedenfor henviser til sit API-afsnit:

Formåen Afsnit
Registrere kommandoer (med en valgfri genvejstast) ctx.commands
Bidrage med menupunkter og skillelinjer ctx.menus
Abonnere på hver editorhændelse (dokumenter, tekst, markering, indstillinger, tema, arbejdsområde …) og udgive dem om arbejdsområdet ctx.events og Hændelsesdokumentationen
Skrive til editorens diagnostikstrøm ctx.log
Sende forbigående beskeder til statuslinjen og eje et vedvarende afsnit i den ctx.status
Læse og ændre buffere, markeringer (også med flere markører), markøren, filer, søgning, bogmærker, markeringer, URL-fremhævning, indrykning og grupper i opdelt visning ctx.editor
Opregne sprog, læse og skifte et dokuments sprog og bidrage med en sprogdefinition ctx.languages
Gemme opsætning pr. udvidelsesmodul, læse indstillinger for hele programmet (mte.keys) og læse indstillinger pr. dokument i lag med .editorconfig ctx.settings / ctx.app_settings / ctx.document_settings
Udgive diagnostik (bølgelinjer og margentegn) ctx.diagnostics
Registrere farver, der kan indgå i temaer, til din egen brugerflade ctx.theme
Åbne sammenligningsvisningen side om side ctx.compare
Registrere en fuldførelsesleverandør (med en frist pr. tastetryk) ctx.completions
Finde din skrivbare mappe pr. udvidelsesmodul ctx.data_dir()
Tilføje et deklarativt dokpanel og vise eller skjule det fra en kommando ctx.docks og mte.ui
Tilføje en side under Indstillinger ctx.settings_page
Læse og skrive panelkontroller under kørslen ctx.ui
Slå et vedvarende flueben til og fra på et menupunkt ctx.menus.set_item_checked
Nedtone et menupunkt, mens dets kommando ikke kan køre ctx.menus.set_item_enabled

Videre herfra