Gå til innhold

Dokumentasjon av plugin.json

Hvert Python-programtillegg erklærer identiteten sin, inngangspunktet sitt og plasseringen sin på menylinjen i en plugin.json-fil ved siden av main.py-en sin. Det er det samme skjemaet C++-siden bruker; bare feltene entry og module er særegne 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åkrevde

Felt Type Merknader
id tekst En entydig identifikator i omvendt DNS-form. Brukes overalt — å slå av og på, loggelinjer, innstillinger per programtillegg. Må ikke endre seg fra versjon til versjon.
apiVersion heltall Må være lik vertens MTE_PLUGIN_API_VERSION. For tiden 1. En uoverensstemmelse vises på programtilleggssiden, og programtillegget listes, men lastes ikke inn.
entry tekst Må være "python" for å gå gjennom Python-backenden. "native" eller ingenting går gjennom Qt-innlasteren.
module tekst Navnet på det Python-modulet som inneholder register(ctx). Er det "main", leter arbeideren etter main.py inne i programtilleggsmappen. Pakkenavn med punktum ("src.main") er en framtidig utvidelse — fase 1 støtter bare flate navn.

Anbefalte

Felt Type Merknader
name tekst Det lesbare visningsnavnet som vises på programtilleggssiden.
version tekst Semver; ellers fritt formulert.
vendor tekst Opphavsperson eller organisasjon. Vises på programtilleggssiden.
description tekst Én eller to linjer. Vises på programtilleggssiden.

Valgfrie

Felt Type Merknader
order heltall Innlastingsrekkefølgen på tvers av programtillegg; lavere lastes tidligere. 1000 som standard. Uavgjorte avgjøres av id. requires går foran.
requires tabell av tekster ID-ene til programtillegg som dette programtillegget ikke kan virke uten (native og Python likt), for eksempel ["org.mte.lsp"] — ikke pip-pakker, de hører hjemme i pyRequires. De startes før dette programtillegget uansett hva order sier; mangler ett av dem, er det slått av, sperret av lisensen eller ble det ikke lastet inn, startes ikke dette programtillegget i det hele tatt, og Innstillinger → Programtillegg sier hvilket det trenger og hvorfor. Samme betydning som for et native programtillegg.
apiMinorVersion heltall Den laveste minor-versjonen av vertens API som programtillegget trenger (standard 0). Et Python-programtillegg har ingen kompilert info(), så dette er dets eneste erklæring: oppgi minor-versjonen til det nyeste kallet du bruker. En eldre vert viser programtillegget som «Krever en nyere versjon av OctoEdit» og starter det ikke.
pyRequires tabell av tekster Pip-kravstrenger (for eksempel ["requests>=2.31"]). Ved programtilleggets første oppstart setter redigereren opp et virtuelt miljø per programtillegg, installerer disse i det med pip og kjører programtilleggets arbeider under det (se Pakking). Poster som ikke er tekst, og tomme poster hoppes over.
permissions tabell av tekster Grove erklæringer om evner (for eksempel ["network"]), som vises skrivebeskyttet i kolonnen Tillatelser under Innstillinger → Programtillegg, så brukerne kan se hva et programtillegg sier at det gjør. Bare en erklæring — håndheves ennå ikke.
menus tabell av objekter Se nedenfor.
thirdParty tabell av objekter De tredjepartskomponentene programtillegget leverer, for kreditering i vinduet Om. Hver post: name (påkrevd), license, url, file. Lever den lisensteksten file navngir, sammen med programtillegget under Plugins/Licenses/<id>/. Se nedenfor.

Hver post erklærer én øverste meny programtillegget bidrar til, og setter plasseringen dens. Gjenta ett objekt per øverste meny du rører (Tools, Plugins, Help og så videre).

"menus": [
  { "title": "Plugins", "barPriority": 570, "itemPriority": 100 }
]
Felt Type Merknader
title tekst, påkrevd Merkelappen på den øverste menyen posten ligger under (Plugins, Tools …). Må passe til det ytterste venstre leddet i de stiene du gir til ctx.menus.add_item().
barPriority heltall, valgfritt Rang fra venstre mot høyre på menylinjen. Lavere = lenger til venstre. Kjernens menyer har faste prioriteter med 100 imellom (Fil 100, Rediger 200 …, Vindu 600); 570 plasserer undermenyen din nær Plugins-plasseringen. Gjentas på tvers av programtillegg som retter seg mot den samme øverste menyen; at den siste vinner, gjør ikke noe, for den kan gjentas.
itemPriority heltall, valgfritt Den loddrette rangen for hele programtillegget ditts blokk inne i den nederste menyen. 1000 som standard. Lavere = lenger opp.

Du lister IKKE enkeltposter her — dem legger ctx.menus.add_item() til under kjøringen. menus handler bare om plassering på menylinjen.

thirdParty

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

"thirdParty": [
  { "name": "SomeLib", "license": "MIT",
    "url": "https://example.com/", "file": "SomeLib-LICENSE.txt" }
]
Felt Type Merknader
name tekst, påkrevd Komponenten. Poster uten et navn som ikke er tomt, droppes.
license tekst, valgfritt En SPDX-aktig merkelapp, for eksempel MIT eller LGPL-3.0.
url tekst, valgfritt Prosjektets eller hjemmesidens adresse.
file tekst, valgfritt Filnavnet på den lisensteksten du leverer, som finnes under Plugins/Licenses/<your-plugin-id>/<file>.

Du eier lisenstekstene: lever dem sammen med programtilleggspakken din under Plugins/Licenses/<id>/. Redigereren lister komponentene og peker brukerne mot den mappen; den tar ikke vare på tredjepartstekster for programtillegget ditt i sin egen Licenses/-mappe.

Den statiske kontrollen

Ved oppdagelsen — og igjen når en .mteplugin-pakke installeres — leser verten module, åpner <pluginDir>/<module>.py og bekrefter at den inneholder en def register(...) på øverste nivå — det kjøres ingen kode. Installasjonsprogrammet avviser en pakke som ikke lever opp til det, med et feilvindu; oppdagelsen hopper i stillhet over programtillegget med en feillinje 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 som begynner med def register(.

Innlastingsrekkefølge og plassering på menylinjen

Bidrar programtillegget ditt til Plugins med barPriority: 570, kommer menyen fram som nummer 570 på menylinjen. To programtillegg med ulike barPriority-verdier for den samme tittelen kappes: det som ble lastet inn sist, vinner, men siden begge som regel erklærer den samme rangen for en gitt meny, betyr det ikke noe. Se PLUGIN_ARCHITECTURE.md §13 for hele rekkefølgemodellen.

Hva som IKKE hører hjemme her

Verten tolker de feltene som er beskrevet ovenfor, og ser bort fra alt annet — finn ikke på felter; en ukjent nøkkel er i stillhet dødvekt.