Python-insticksmoduler¶
Modular Text Editor läser in Python-insticksmoduler vid sidan av inhemska
C++-moduler genom samma hanteringsyta. En Python-insticksmodul är en mapp som
innehåller en plugin.json och minst en .py-fil med en funktion register(ctx)
på toppnivå.
Redigeraren startar en liten arbetarunderprocess per insticksmodul, kör
register(ctx) i den, och fördelar kommandon, menyer och händelser över en
RPC-kanal. Din insticksmodul rör aldrig Qt eller Scintilla — objektet ctx är en
vanlig Python-tjänstesökare.
Vad som fungerar i dag (faserna 1–5: funktionellt kompletta)
Fas 1: kommandon, menyposter, händelseprenumerationer (öppna / stänga / spara / aktivt dokument ändrat / markering ändrad / programmet avslutas), loggen, statusraden.
Fas 2: redigerarbuffert / markering / markör / sökning / indrag /
filoperationer genom ctx.editor.*, bestående inställningar genom
ctx.settings.* och skrivskyddade programinställningar genom
ctx.app_settings.*, kompletteringsleverantörer (med en kort deadline
knuten till tangenttryckningen) genom @ctx.completions.provider(...), och
ctx.data_dir() för den skrivbara mappen per insticksmodul.
Fas 3: deklarativa dockpaneler genom ctx.docks.add_panel(...),
Inställningssidor genom ctx.settings_page.register(...), båda byggda med
formulärbyggarna i mte.ui, och åtkomst till kontrollerna under
körning genom ctx.ui.get / ctx.ui.set.
Fas 4: installerare för .mteplugin-paket — komprimera din
insticksmodulsmapp och installera den från Inställningar → Insticksmoduler (se
Paketering).
Fas 5: virtuella miljöer per insticksmodul — deklarera pip-beroenden i
pyRequires så ställer redigeraren i ordning en venv för din insticksmodul vid
första starten (se Beroenden); en
deklaration permissions som visas på sidan Insticksmoduler; och en RPC-grund
med strömning och avbrott (ännu utan API som vetter mot insticksmoduler — den
bär framtida AI-tjänster).
Minimal insticksmodul¶
Skapa <any-folder>/hello/ med de här två filerna.
{
"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")
Komprimera mappen som hello.mteplugin och installera den via Inställningar →
Insticksmoduler → Installera insticksmodul... — eller lägg mappen för hand i din
insticksmodulskatalog per användare (se Paketering). Starta om
redigeraren så dyker Plugins → Hello → Say Hi upp i menyraden.
Vad du behöver på maskinen¶
- En Python-tolk 3.9+ som går att nå på ett av två sätt:
- i
PATH(py.exe,python.exeellerpython3.exepå Windows;python3på macOS/Linux), eller - utpekad av miljövariabeln
MTE_PYTHON(antingen en absolut sökväg till enpython.exe, eller ett naket namn att slå upp iPATH).
- i
- Inga pip-paket: klientbiblioteket
mtefrån fas 1 följer med redigeraren och läggs till isys.pathåt dig.
Redigeraren noterar vid start vilken tolk den valt:
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, hoppa till Felsökning.
Vad din insticksmodul kan göra¶
Varje post nedan länkar till sitt API-avsnitt:
| Möjlighet | Avsnitt |
|---|---|
| Registrera kommandon (med valfritt kortkommando) | ctx.commands |
| Bidra med menyposter och avskiljare | ctx.menus |
| Prenumerera på varje redigerarhändelse (dokument, text, markering, inställningar, tema, arbetsyta, …) och publicera arbetsytans | ctx.events och Händelsereferens |
| Skriva till redigerarens diagnostikström | ctx.log |
| Lägga flyktiga meddelanden på statusraden, äga ett bestående statusradssegment | ctx.status |
| Läsa/ändra buffertar, markeringar (även med flera markörer), markör, filer, sökning, bokmärken, markeringar, URL-färgmarkering, indrag, den delade vyns grupper | ctx.editor |
| Lista språk, läsa / byta ett dokuments språk, bidra med en språkdefinition | ctx.languages |
Spara konfiguration per insticksmodul, läsa programövergripande inställningar (mte.keys), läsa inställningar per dokument skiktade med .editorconfig |
ctx.settings / ctx.app_settings / ctx.document_settings |
| Publicera diagnostik (våglinjer + marginaltecken) | ctx.diagnostics |
| Registrera temabara färger för ditt eget gränssnitt | ctx.theme |
| Öppna jämförelsevyn sida vid sida | ctx.compare |
| Registrera en kompletteringsleverantör (med en deadline knuten till tangenttryckningen) | ctx.completions |
| Hitta din skrivbara mapp per insticksmodul | ctx.data_dir() |
| Lägga till en deklarativ dockpanel, visa / dölja den från ett kommando | ctx.docks och mte.ui |
| Lägga till en sida i Inställningar | ctx.settings_page |
| Läsa / skriva en panels kontroller under körning | ctx.ui |
| Växla ett bestående kryss på en menypost | ctx.menus.set_item_checked |
| Gråtona en menypost medan dess kommando inte kan köras | ctx.menus.set_item_enabled |
Vad som kommer härnäst¶
- Referens för
plugin.json— varje fält och vad det gör. - Referens för
ctx-API:t — referens metod för metod för varje tjänst ictx. - Händelsereferens — tabellen ämne ↔ dataklass.
- Paketering — var insticksmodulsmappar hör hemma på disken.
- Felsökning — att tyda värdens loggrader.
- Skriva med Claude — en kompakt guide som du kan ge en AI-assistent för att låta den göra en insticksmodul åt dig.