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.
{
"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")
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.exeellerpython3.exepå Windows;python3på macOS og Linux), eller - udpeget af miljøvariablen
MTE_PYTHON(enten en absolut sti til enpython.exeeller blot et navn at slå op iPATH).
- i
- Ingen pip-pakker: klientbiblioteket
mtefra fase 1 følger med editoren og føjes tilsys.pathfor 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¶
- Dokumentation af
plugin.json— hvert felt, og hvad det gør. - Dokumentation af
ctx-API'en — metode for metode for hverctx-tjeneste. - Hændelsesdokumentation — tabellen over emne ↔ dataklasse.
- Pakning — hvor modulmapper hører hjemme på disken.
- Fejlfinding — at tyde værtens loglinjer.
- At skrive med Claude — en kompakt vejledning, du kan give til en AI-assistent, så den laver et udvidelsesmodul for dig.