Gå til innhold

Python-programtillegg

Modular Text Editor laster inn Python-programtillegg side om side med innebygde C++-programtillegg gjennom den samme flaten for å styre programtillegg. Et Python-programtillegg er en mappe som inneholder én plugin.json og minst én .py-fil med en register(ctx)-funksjon på øverste nivå.

Redigereren starter en liten arbeiderunderprosess per programtillegg, kjører register(ctx) inne i den, og sender kommandoer, menyer og hendelser fram og tilbake over en RPC-kanal. Programtillegget ditt rører aldri Qt eller Scintilla — ctx-objektet er et alminnelig tjenestekatalog i Python.

Hva som virker i dag (fase 1–5: funksjonelt fullstendig)

Fase 1: kommandoer, menyposter, hendelsesabonnementer (åpne / lukke / lagre / aktivt dokument endret / merking endret / programmet avslutter), loggen og statuslinjen.

Fase 2: redigererbuffer, merking, markør, søk, innrykk og filhandlinger gjennom ctx.editor.*, varige innstillinger gjennom ctx.settings.* og skrivebeskyttede programinnstillinger gjennom ctx.app_settings.*, fullføringsleverandører (med en kort frist per tastetrykk) gjennom @ctx.completions.provider(...), og ctx.data_dir() for den skrivbare mappen per programtillegg.

Fase 3: deklarative dokkpaneler gjennom ctx.docks.add_panel(...), innstillingssider gjennom ctx.settings_page.register(...), begge bygget av mte.ui-skjemabyggere, og tilgang til kontroller under kjøringen gjennom ctx.ui.get / ctx.ui.set.

Fase 4: installasjonsprogram for .mteplugin-pakker — pakk programtilleggsmappen din som en zip, og installer den fra Innstillinger → Programtillegg (se Pakking).

Fase 5: virtuelle miljøer per programtillegg — erklær pip-avhengigheter i pyRequires, så setter redigereren opp et virtuelt miljø for programtillegget ditt ved første oppstart (se Avhengigheter); en permissions-erklæring som vises på programtilleggssiden; og et RPC-underlag med strømming og avbrytelse (ennå ingen API som vender mot programtillegg — det ligger til grunn for framtidige KI-tjenester).

Et minimalt programtillegg

Lag <any-folder>/hello/ med disse to filene.

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

Pakk mappen som en zip ved navn hello.mteplugin, og installer den via Innstillinger → Programtillegg → Installer programtillegg... — eller legg mappen i programtilleggsmappen din per bruker for hånd (se Pakking). Start redigereren på nytt, så kommer Plugins → Hello → Say Hi fram på menylinjen.

Hva du trenger på maskinen

  • En Python 3.9+-tolk som kan nås på en av to måter:
    • i PATH (py.exe, python.exe eller python3.exe på Windows; python3 på macOS og Linux), eller
    • utpekt av miljøvariabelen MTE_PYTHON (enten en absolutt sti til en python.exe eller bare et navn å slå opp i PATH).
  • Ingen pip-pakker: klientbiblioteket mte fra fase 1 følger med redigereren og legges i sys.path for deg.

Redigereren noterer ved oppstart hvilken tolk 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 Feilsøking.

Hva programtillegget ditt kan

Hvert punkt nedenfor lenker til sitt API-avsnitt:

Evne Avsnitt
Registrere kommandoer (med en valgfri hurtigtast) ctx.commands
Bidra med menyposter og skillelinjer ctx.menus
Abonnere på hver redigererhendelse (dokumenter, tekst, merking, innstillinger, tema, arbeidsområde …) og publisere dem om arbeidsområdet ctx.events og Hendelsesdokumentasjon
Skrive til redigererens diagnostikkstrøm ctx.log
Sende forbigående meldinger til statuslinjen og eie et varig avsnitt i den ctx.status
Lese og endre buffere, merkinger (også med flere markører), markøren, filer, søk, bokmerker, merker, URL-utheving, innrykk og grupper i delt visning ctx.editor
Liste språk, lese og bytte et dokuments språk og bidra med en språkdefinisjon ctx.languages
Lagre oppsett per programtillegg, lese innstillinger for hele programmet (mte.keys) og lese innstillinger per dokument i lag med .editorconfig ctx.settings / ctx.app_settings / ctx.document_settings
Publisere diagnostikk (bølgelinjer og margtegn) ctx.diagnostics
Registrere farger for ditt eget grensesnitt som kan inngå i temaer ctx.theme
Åpne sammenligningsvisningen side ved side ctx.compare
Registrere en fullføringsleverandør (med en frist per tastetrykk) ctx.completions
Finne den skrivbare mappen din per programtillegg ctx.data_dir()
Legge til et deklarativt dokkpanel og vise eller skjule det fra en kommando ctx.docks og mte.ui
Legge til en side under Innstillinger ctx.settings_page
Lese og skrive panelkontroller under kjøringen ctx.ui
Slå et varig kryss av og på i en menypost ctx.menus.set_item_checked
Nedtone en menypost mens kommandoen dens ikke kan kjøre ctx.menus.set_item_enabled

Videre herfra