Hyppää sisältöön

plugin.json-dokumentaatio

Kukin Python-liitännäinen ilmoittaa identiteettinsä, aloituskohtansa ja valikkopalkkisijaintinsa plugin.json-tiedostossa main.py-tiedostonsa vieressä. Tämä on sama skeema, jota C++-puoli käyttää; vain kentät entry ja module ovat Python-kohtaisia.

Esimerkki

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

Kentät

Pakolliset

Kenttä Tyyppi Huomautuksia
id merkkijono Käänteisen DNS:n muotoinen yksilöllinen tunniste. Käytetään kaikkialla — käyttöönotto ja käytöstä poisto, lokirivit, liitännäiskohtaiset asetukset. Ei saa muuttua versioiden välillä.
apiVersion kokonaisluku Täytyy olla sama kuin isännän MTE_PLUGIN_API_VERSION. Tällä hetkellä 1. Ristiriita näkyy liitännäissivulla, ja liitännäinen luetellaan muttei ladata.
entry merkkijono Täytyy olla "python", jotta reititetään Python-taustajärjestelmän kautta. "native" tai puuttuva reitittää Qt-lataajan kautta.
module merkkijono Sen Python-moduulin nimi, joka sisältää funktion register(ctx). Jos arvo on "main", työntekijä etsii tiedostoa main.py liitännäiskansion sisältä. Pistein erotetut pakettinimet ("src.main") ovat tuleva laajennus — vaihe 1 tukee vain litteitä nimiä.

Suositellut

Kenttä Tyyppi Huomautuksia
name merkkijono Ihmisluettava näyttönimi, joka näkyy liitännäissivulla.
version merkkijono Semver; muutoin vapaamuotoinen.
vendor merkkijono Tekijä tai organisaatio. Näkyy liitännäissivulla.
description merkkijono Yksi tai kaksi riviä. Näkyy liitännäissivulla.

Valinnaiset

Kenttä Tyyppi Huomautuksia
order kokonaisluku Latausjärjestys liitännäisten kesken; pienempi latautuu aiemmin. Oletus 1000. Tasapelit ratkaisee id. requires menee sen edelle.
requires merkkijonotaulukko Niiden liitännäisten tunnisteet, joita ilman tämä liitännäinen ei voi toimia (natiivit ja Python-liitännäiset samoin), esimerkiksi ["org.mte.lsp"] — ei pip-paketteja, ne kuuluvat kenttään pyRequires. Ne käynnistetään ennen tätä liitännäistä riippumatta order-arvosta; jos jokin puuttuu, on poistettu käytöstä, lisenssin estämä tai jäi lataamatta, tätä liitännäistä ei käynnistetä lainkaan, ja Asetukset → Liitännäiset kertoo, minkä se tarvitsee ja miksi. Sama merkitys kuin natiivissa liitännäisessä.
apiMinorVersion kokonaisluku Isäntä-API:n pienin minor-versio, jota tämä liitännäinen tarvitsee (oletus 0). Python-liitännäisellä ei ole käännettyä info()-funktiota, joten tämä on sen ainoa ilmoitus: ilmoita uusimman käyttämäsi kutsun minor-versio. Vanhempi isäntä näyttää liitännäisen tilana »Vaatii uudemman OctoEdit-version« eikä käynnistä sitä.
pyRequires merkkijonotaulukko Pip-vaatimusmerkkijonoja (esimerkiksi ["requests>=2.31"]). Liitännäisen ensimmäisellä käynnistyksellä editori valmistelee liitännäiskohtaisen virtuaaliympäristön, asentaa nämä siihen pipillä ja ajaa liitännäisen työntekijän sen alla (katso Paketointi). Muut kuin merkkijonot ja tyhjät kohdat ohitetaan.
permissions merkkijonotaulukko Karkeita kykyilmoituksia (esimerkiksi ["network"]), näytettynä vain luettavana Käyttöoikeudet-sarakkeessa kohdassa Asetukset → Liitännäiset, jotta käyttäjät näkevät, mitä liitännäinen sanoo tekevänsä. Pelkkä ilmoitus — ei vielä pakoteta.
menus objektitaulukko Katso alta.
thirdParty objektitaulukko Kolmannen osapuolen komponentit, jotka liitännäinen toimittaa, tunnustettavaksi Tietoja-ikkunassa. Kukin kohta: name (pakollinen), license, url, file. Toimita kentän file nimeämä lisenssiteksti liitännäisen mukana kansiossa Plugins/Licenses/<id>/. Katso alta.

Kukin kohta ilmoittaa yhden ylimmän tason valikon, johon liitännäinen osallistuu, ja asettaa sen sijainnin. Toista yksi objekti kutakin koskettamaasi ylimmän tason valikkoa kohti (Tools, Plugins, Help ja niin edelleen).

"menus": [
  { "title": "Plugins", "barPriority": 570, "itemPriority": 100 }
]
Kenttä Tyyppi Huomautuksia
title merkkijono, pakollinen Ylimmän tason valikon nimiö, jonka alla kohta sijaitsee (Plugins, Tools …). Täytyy vastata niiden polkujen vasemmanpuoleisinta osaa, jotka välität funktiolle ctx.menus.add_item().
barPriority kokonaisluku, valinnainen Sijainti vasemmalta oikealle valikkopalkissa. Pienempi = kauempana vasemmalla. Ytimen valikoilla on kiinteät, 100:n välein sijoitetut sijainnit (Tiedosto 100, Muokkaa 200 …, Ikkuna 600); 570 sijoittaa alivalikkosi lähelle Plugins-sijaintia. Toistetaan niiden liitännäisten kesken, jotka kohdistuvat samaan ylimmän tason valikkoon; viimeisen voittaminen on ongelmatonta, koska se on idempotenttia.
itemPriority kokonaisluku, valinnainen Liitännäisesi koko lohkon pystysuora sijainti lehtivalikon sisällä. Oletus 1000. Pienempi = ylempänä.

Et luettele yksittäisiä kohtia täällä — ne lisää funktio ctx.menus.add_item() ajon aikana. menus koskee vain valikkopalkkisijaintia.

thirdParty

Ilmoita mikä tahansa kolmannen osapuolen komponentti, jonka liitännäisesi toimittaa, jotta Tietoja-ikkuna voi tunnustaa sen. Kukin kohta:

"thirdParty": [
  { "name": "SomeLib", "license": "MIT",
    "url": "https://example.com/", "file": "SomeLib-LICENSE.txt" }
]
Kenttä Tyyppi Huomautuksia
name merkkijono, pakollinen Komponentti. Kohdat, joilla ei ole ei-tyhjää nimeä, pudotetaan.
license merkkijono, valinnainen SPDX-tyylinen nimiö, esimerkiksi MIT tai LGPL-3.0.
url merkkijono, valinnainen Projektin tai kotisivun osoite.
file merkkijono, valinnainen Toimittamasi lisenssitekstin tiedostonimi, joka ratkaistaan polusta Plugins/Licenses/<your-plugin-id>/<file>.

Sinä omistat lisenssitekstit: toimita ne liitännäispakettisi mukana kansiossa Plugins/Licenses/<id>/. Editori luettelee komponentit ja osoittaa käyttäjät tuohon kansioon; se ei säilytä liitännäisesi kolmannen osapuolen tekstejä omassa Licenses/-kansiossaan.

Staattinen tarkistus

Etsintähetkellä — ja uudelleen, kun .mteplugin-paketti asennetaan — isäntä lukee kentän module, avaa tiedoston <pluginDir>/<module>.py ja vahvistaa, että siinä on ylätason def register(...) — mitään koodia ei ajeta. Asennusohjelma hylkää epäonnistuvan paketin virheikkunalla; etsintä ohittaa liitännäisen hiljaisesti ja kirjaa virherivin lokiin:

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

Pidä funktio register sarakkeessa 0 rivillä, joka alkaa merkkijonolla def register(.

Latausjärjestys ja valikkopalkkisijainti

Jos liitännäisesi osallistuu valikkoon Plugins arvolla barPriority: 570, valikko näkyy sijainnissa 570 valikkopalkissa. Kaksi liitännäistä, joilla on eri barPriority-arvot samalle otsikolle, kilpailevat: se, joka latautui viimeisenä, voittaa, mutta koska molemmat yleensä ilmoittavat saman sijainnin tietylle valikolle, sillä ei ole väliä. Katso koko järjestysmalli tiedostosta PLUGIN_ARCHITECTURE.md §13.

Mitä tänne EI kuulu

Isäntä jäsentää yllä dokumentoidut kentät ja ohittaa kaiken muun — älä keksi kenttiä; tuntematon avain on hiljaista kuollutta painoa.