Gå till innehållet

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.

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

"menus": [
  { "title": "Plugins", "barPriority": 570, "itemPriority": 100 }
]
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.