Gå til indholdet

Dokumentation af plugin.json

Hvert Python-udvidelsesmodul erklærer sin identitet, sit indgangspunkt og sin placering på menulinjen i en plugin.json-fil ved siden af sin main.py. Det er det samme skema, C++-siden bruger; kun felterne entry og module er særlige for Python.

Eksempel

{
  "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 }
  ]
}

Felter

Påkrævede

Felt Type Bemærkninger
id tekst Entydig identifikator i omvendt DNS-form. Bruges overalt — at slå til og fra, loglinjer, indstillinger pr. udvidelsesmodul. Må ikke ændre sig fra version til version.
apiVersion heltal Skal være lig med værtens MTE_PLUGIN_API_VERSION. I øjeblikket 1. En uoverensstemmelse vises på udvidelsesmodulsiden, og modulet opregnes, men indlæses ikke.
entry tekst Skal være "python" for at gå gennem Python-backenden. "native" eller ingenting går gennem Qt-indlæseren.
module tekst Navnet på det Python-modul, der indeholder register(ctx). Er det "main", leder arbejderen efter main.py inde i modulmappen. Pakkenavne med punktummer ("src.main") er en fremtidig udvidelse — fase 1 understøtter kun flade navne.

Anbefalede

Felt Type Bemærkninger
name tekst Det læsbare visningsnavn, der vises på udvidelsesmodulsiden.
version tekst Semver; ellers frit formuleret.
vendor tekst Ophavsmand eller organisation. Vises på udvidelsesmodulsiden.
description tekst En eller to linjer. Vises på udvidelsesmodulsiden.

Valgfrie

Felt Type Bemærkninger
order heltal Indlæsningsrækkefølgen på tværs af udvidelsesmoduler; lavere indlæses tidligere. 1000 som standard. Uafgjorte afgøres af id. requires går forud.
requires tabel af tekster Id'erne på de udvidelsesmoduler, som dette modul ikke kan fungere uden (native og Python ens), f.eks. ["org.mte.lsp"] — ikke pip-pakker, de hører til i pyRequires. De startes før dette modul, uanset hvad order siger; mangler et af dem, er det slået fra, spærret af licensen eller blev det ikke indlæst, startes dette modul slet ikke, og Indstillinger → Udvidelsesmoduler fortæller, hvilket det mangler og hvorfor. Samme betydning som for et native udvidelsesmodul.
apiMinorVersion heltal Den laveste minor-version af værtens API, som modulet har brug for (standard 0). Et Python-modul har ingen kompileret info(), så dette er dets eneste erklæring: angiv minor-versionen for det nyeste kald, du bruger. En ældre vært viser modulet som »Kræver en nyere version af OctoEdit« og starter det ikke.
menus tabel af objekter Se nedenfor.
pyRequires tabel af tekster Pip-kravstrenge (f.eks. ["requests>=2.31"]). Ved modulets første start sætter editoren et virtuelt miljø pr. udvidelsesmodul op, installerer disse i det med pip og kører modulets arbejder under det (se Pakning). Poster, der ikke er tekst, og tomme poster springes over.
permissions tabel af tekster Grove erklæringer om formåen (f.eks. ["network"]), der vises skrivebeskyttet i kolonnen Tilladelser under Indstillinger → Udvidelsesmoduler, så brugerne kan se, hvad et modul siger, det gør. Kun en erklæring — håndhæves endnu ikke.
thirdParty tabel af objekter De tredjepartskomponenter, udvidelsesmodulet leverer, til kreditering i vinduet Om. Hver post: name (påkrævet), license, url, file. Lever den licenstekst, file navngiver, sammen med modulet under Plugins/Licenses/<id>/. Se nedenfor.

Hver post erklærer én øverste menu, udvidelsesmodulet bidrager til, og sætter dens placering. Gentag ét objekt pr. øverste menu, du rører (Tools, Plugins, Help og så videre).

"menus": [
  { "title": "Plugins", "barPriority": 570, "itemPriority": 100 }
]
Felt Type Bemærkninger
title tekst, påkrævet Den øverste menus mærkat, punktet ligger under (Plugins, Tools …). Skal passe til det yderste venstre led i de stier, du giver til ctx.menus.add_item().
barPriority heltal, valgfrit Rang fra venstre mod højre på menulinjen. Lavere = længere til venstre. Kernens menuer har faste prioriteter med 100 imellem (Filer 100, Rediger 200 …, Vindue 600); 570 placerer din undermenu nær Plugins-placeringen. Gentages på tværs af moduler, der retter sig mod den samme øverste menu; at den sidste vinder, gør ikke noget, for den kan gentages.
itemPriority heltal, valgfrit Den lodrette rang for hele dit moduls blok inde i den nederste menu. 1000 som standard. Lavere = længere oppe.

Du opregner IKKE enkelte punkter her — dem tilføjer ctx.menus.add_item() under kørslen. menus handler kun om placering på menulinjen.

thirdParty

Erklær enhver tredjepartskomponent, dit udvidelsesmodul leverer, så vinduet Om kan kreditere den. Hver post:

"thirdParty": [
  { "name": "SomeLib", "license": "MIT",
    "url": "https://example.com/", "file": "SomeLib-LICENSE.txt" }
]
Felt Type Bemærkninger
name tekst, påkrævet Komponenten. Poster uden et navn, der ikke er tomt, droppes.
license tekst, valgfrit En SPDX-agtig mærkat, f.eks. MIT eller LGPL-3.0.
url tekst, valgfrit Projektets eller hjemmesidens adresse.
file tekst, valgfrit Filnavnet på den licenstekst, du leverer, som findes under Plugins/Licenses/<your-plugin-id>/<file>.

Du ejer licensteksterne: lever dem sammen med din udvidelsesmodulpakke under Plugins/Licenses/<id>/. Editoren opregner komponenterne og peger brugerne mod den mappe; den gemmer ikke tredjepartstekster for dit modul i sin egen Licenses/-mappe.

Den statiske efterprøvning

Ved opdagelsen — og igen, når en .mteplugin-pakke installeres — læser værten module, åbner <pluginDir>/<module>.py og bekræfter, at den indeholder en def register(...) på øverste niveau — der køres ingen kode. Installationsprogrammet afviser en pakke, der ikke lever op til det, med et fejlvindue; opdagelsen springer i stilhed modulet over med en fejllinje i loggen:

PythonPluginBackend: skipping 'org.example.wordcount': module
'.../main.py' does not declare a top-level `def register(...)`.

Hold register i kolonne 0 på en linje, der begynder med def register(.

Indlæsningsrækkefølge og placering på menulinjen

Bidrager dit udvidelsesmodul til Plugins med barPriority: 570, kommer menuen frem som nummer 570 på menulinjen. To moduler med forskellige barPriority-værdier for den samme titel kappes: det, der blev indlæst sidst, vinder, men da begge som regel erklærer den samme rang for en given menu, betyder det ikke noget. Se PLUGIN_ARCHITECTURE.md §13 for hele rækkefølgemodellen.

Hvad der IKKE hører hjemme her

Værten fortolker de felter, der er beskrevet ovenfor, og ser bort fra alt andet — opfind ikke felter; en ukendt nøgle er i stilhed dødvægt.