Referens för plugin.json¶
Varje Python-insticksmodul deklarerar sin identitet, sin ingångspunkt och sin
placering i menyraden i en fil plugin.json bredvid sin main.py. Det är samma
schema som C++-sidan använder; bara fälten entry och module är specifika för
Python.
Exempel¶
{
"id": "org.example.wordcount",
"name": "Word Count",
"version": "1.0.0",
"vendor": "Example, Inc.",
"description": "Counts words and characters in the active document.",
"apiVersion": 1,
"entry": "python",
"module": "main",
"pyRequires": [],
"order": 900,
"menus": [
{ "title": "Plugins", "barPriority": 570, "itemPriority": 100 }
]
}
Fält¶
Obligatoriska¶
| Fält | Typ | Anmärkningar |
|---|---|---|
id |
sträng | Unik identifierare i omvänd DNS-form. Används överallt — aktivera/inaktivera, loggrader, inställningar per insticksmodul. Får inte ändras mellan versioner. |
apiVersion |
heltal | Måste vara lika med värdens MTE_PLUGIN_API_VERSION. För närvarande 1. En avvikelse framgår på sidan Insticksmoduler och modulen listas men läses inte in. |
entry |
sträng | Måste vara "python" för att gå genom Python-backenden. "native" eller utelämnat går genom Qt-laddaren. |
module |
sträng | Namnet på den Python-modul som innehåller register(ctx). Är det "main" letar arbetaren efter main.py i insticksmodulsmappen. Paketnamn med punkter ("src.main") är en framtida utvidgning — fas 1 stöder bara platta namn. |
Rekommenderade¶
| Fält | Typ | Anmärkningar |
|---|---|---|
name |
sträng | Läsbart visningsnamn som visas på sidan Insticksmoduler. |
version |
sträng | Semver; i övrigt fri form. |
vendor |
sträng | Författare / organisation. Visas på sidan Insticksmoduler. |
description |
sträng | En eller två rader. Visas på sidan Insticksmoduler. |
Valfria¶
| Fält | Typ | Anmärkningar |
|---|---|---|
order |
heltal | Inläsningsordning mellan insticksmoduler; lägre läses in tidigare. Standard 1000. Lika värden avgörs av id. requires går före. |
requires |
vektor av strängar | Id:n för insticksmoduler som den här modulen inte kan fungera utan (inbyggda och Python likadant), till exempel ["org.mte.lsp"] — inte pip-paket, de hör hemma i pyRequires. De startas före den här modulen oavsett vad order säger; om någon saknas, är inaktiverad, spärrad av licensen eller inte lästes in startas den här modulen inte alls, och Inställningar → Insticksmoduler talar om vilken den behöver och varför. Samma betydelse som för en inbyggd insticksmodul. |
apiMinorVersion |
heltal | Den lägsta minorversion av värdens API som modulen behöver (standard 0). En Python-modul har ingen kompilerad info(), så detta är dess enda uppgift: ange minorversionen för det nyaste anropet du använder. En äldre värd visar modulen som «Kräver en nyare version av OctoEdit» och startar den inte. |
menus |
vektor av objekt | Se nedan. |
pyRequires |
vektor av strängar | Pip-kravsträngar (till exempel ["requests>=2.31"]). Vid insticksmodulens första start ställer redigeraren i ordning en virtuell miljö per insticksmodul, pip-installerar dessa i den, och kör modulens arbetare under den (se Paketering). Poster som inte är strängar och tomma poster hoppas över. |
permissions |
vektor av strängar | Grova deklarationer av förmågor (till exempel ["network"]), visade skrivskyddade i kolumnen Behörigheter i Inställningar → Insticksmoduler så att användare kan se vad en modul säger om sig själv. Endast en deklaration — inte upprätthållen ännu. |
thirdParty |
vektor av objekt | Tredjepartskomponenter insticksmodulen levererar, för angivelse i dialogrutan Om. Varje post: name (obligatoriskt), license, url, file. Leverera licenstexten som file namnger bredvid modulen under Plugins/Licenses/<id>/. Se nedan. |
menus¶
Varje post deklarerar en toppnivåmeny som insticksmodulen bidrar till och anger dess
position. Upprepa ett objekt per toppnivåmeny du rör (Tools, Plugins, Help,
och så vidare).
| Fält | Typ | Anmärkningar |
|---|---|---|
title |
sträng, obligatoriskt | Etiketten för den toppnivåmeny posten bor under (Plugins, Tools, …). Måste stämma med det vänstraste segmentet i de sökvägar du skickar till ctx.menus.add_item(). |
barPriority |
heltal, valfritt | Rang från vänster till höger i menyraden. Lägre = längre till vänster. Kärnmenyerna har fasta prioriteter med 100 emellan (Fil 100, Redigera 200, …, Fönster 600); 570 placerar din undermeny nära Plugins. Upprepas över insticksmoduler som siktar på samma toppnivåmeny; sist vinner, och det gör inget eftersom det är idempotent. |
itemPriority |
heltal, valfritt | Lodrät rang för hela din insticksmoduls block inom lövmenyn. Standard 1000. Lägre = högre upp. |
Du listar INTE enskilda poster här — de läggs till av ctx.menus.add_item() under
körning. menus handlar bara om placeringen i menyraden.
thirdParty¶
Deklarera varje tredjepartskomponent din insticksmodul levererar så att dialogrutan Om kan ange den. Varje post:
"thirdParty": [
{ "name": "SomeLib", "license": "MIT",
"url": "https://example.com/", "file": "SomeLib-LICENSE.txt" }
]
| Fält | Typ | Anmärkningar |
|---|---|---|
name |
sträng, obligatoriskt | Komponenten. Poster utan ett icke-tomt namn faller bort. |
license |
sträng, valfritt | Etikett i SPDX-stil, till exempel MIT, LGPL-3.0. |
url |
sträng, valfritt | Projekt- eller hemsida. |
file |
sträng, valfritt | Det bara filnamnet på den licenstext du levererar, upplöst som Plugins/Licenses/<your-plugin-id>/<file>. |
Licenstexterna tillhör dig: leverera dem med ditt insticksmodulspaket under
Plugins/Licenses/<id>/. Redigeraren listar komponenterna och pekar användare mot
den mappen; den behåller inte din insticksmoduls tredjepartstexter i sin egen mapp
Licenses/.
Statisk sond¶
Vid upptäckten — och igen när ett .mteplugin-paket installeras — läser värden
module, öppnar <pluginDir>/<module>.py, och bekräftar att den innehåller ett
def register(...) på toppnivå — ingen kod körs. Installeraren avvisar ett
paket som inte klarar det med en feldialog; upptäckten hoppar tyst över modulen med
en felrad i loggen:
PythonPluginBackend: skipping 'org.example.wordcount': module
'.../main.py' does not declare a top-level `def register(...)`.
Håll register på kolumn 0 på en rad som börjar med def register(.
Inläsningsordning och placering i menyraden¶
Bidrar din insticksmodul till Plugins med barPriority: 570 visas menyn på rang
570 i menyraden. Två insticksmoduler med olika värden på barPriority för samma
titel tävlar: den som lästes in sist vinner, men eftersom båda vanligtvis deklarerar
samma rang för en given meny spelar det ingen roll. Se
PLUGIN_ARCHITECTURE.md §13 för hela ordningsmodellen.
Vad som INTE hör hemma här¶
Värden tolkar de fält som dokumenteras ovan och ignorerar allt annat — hitta inte på fält; en okänd nyckel är tyst dödvikt.