På denne siden
Utvikling og implementering av tillegg
Seer har en modulær arkitektur for programtillegg som lar utviklere utvide funksjonaliteten på tvers av flere områder. Velg en tilleggsfunksjon nedenfor for å utforske utviklingsspesifikasjonene:
Viser-tillegg (Viewers)
Viser-tillegg utvider forhåndsvisningsvinduet som åpnes med mellomromstasten. De støtter to implementeringsarkitekturer: Konverteringstillegg (Convert) og DLL-tillegg (SDK v3).
Bygg et viser-tillegg med en KI-agent
Erstatt plassholderen nedenfor, og gi deretter den fullstendige instruksjonen til kodingsagenten din:
Les og følg Seer-utviklingsveiledningen for tillegg på https://raw.githubusercontent.com/ccseer/Seer-Plugins/refs/heads/master/plugin_development_guide.md. Behandle den som den eneste sannhetskilden for arkitektur, plugin.json, implementering, validering og pakking. Hvis veiledningen ikke er tilgjengelig, stopp og rapporter det før du fortsetter.
Før du gjør noe arbeid, inspiser Requirement (Krav) nedenfor. Hvis det mangler, er uendret plassholdertekst, eller for tvetydig til å implementeres, still ett avklarende spørsmål og vent. Ikke gjett det manglende kravet.
Når det er avklart, velg Convert eller DLL og begrunn valget kort, og implementer deretter et fullstendig, installerbart tillegg i gjeldende arbeidsområde. Ikke endre Seer i seg selv eller stopp ved en plan eller kodeutdrag.
Følg hvert gjeldende valideringstrinn i veiledningen og rapporter de faktiske resultatene. Kjør en forhåndsvisningstest i Seer-appen når det er mulig; ellers oppgi eksplisitt at kjøretidsverifisering ikke ble utført.
Requirement: [ERSTATT DENNE PLASSHOLDEREN med kravet til visertillegget ditt, f.eks. gjengi mermaid-diagrammer i forhåndsvisning av markdown]
Konverteringstillegg (Convert)
Seer behandler konverteringstillegg som eksterne kommandolinje-eksekverere. Når en bruker trykker på mellomromstasten på en støttet fil, starter Seer det konfigurerte programmet og sender filbaner via plassholdere. Programmet konverterer filen til et format som støttes innebygd av Seer (HTML, JSON, TXT, bilder osv.), som Seer laster inn og viser så snart prosessen avsluttes.
Plassholdervariabler
| Plassholder | Beskrivelse | Eksempel |
|---|---|---|
${output_file} |
Grunnleggende utdatabane; legg til ønsket filtype i argumentene. | ${output_file}.html |
${no_cache} |
Deaktiverer konverteringshurtigbufring og lagrer utdata i mappen for automatisk sletting, som tømmes når forhåndsvisningsvinduer lukkes. | ${no_cache} |
Konverteringstillegg godtar også de universelle plassholderne (${input_file}, ${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}) og bruker ikke ${type_*}-samsvarskodene, ettersom de deklarerer samsvar i formats i stedet for extensions. Begge dekkes i den felles delen Plassholdere og samsvarskoder nedenfor.
Støttede kjørbare filer og skriptkjøretider
- Skript: PowerShell-skript (
.ps1, støttes direkte via PowerShell). For Python (.py), Node.js (.js) eller batch (.bat), kompiler til en frittstående.exe(f.eks. med PyInstaller) eller inkluder tolken i pakken. - Egendefinerte binærfiler: Frittstående CLI-programmer kompilert fra C/C++, Rust, Go eller C#.
plugin.json-eksempel (Convert)
{
"name": "ipynb",
"version": "1.2.0",
"type": "convert",
"roles": [
"viewer"
],
"entry": "ipynb.ps1",
"args": [
"-i",
"${input_file}",
"-o",
"${output_file}.html"
],
"formats": [
"ipynb"
],
"appMinVersion": "4.1.3",
"author": "ccseer"
}
DLL-tillegg (SDK v3)
For maksimal visningsytelse, dyp interaktivitet eller strømmende visninger støtter Seer innfødte C++/Qt dynamiske lenkebiblioteker som lastes direkte inn i visningsområdet via QPluginLoader.
- Tekniske spesifikasjoner: C++17, Qt 6.8, MSVC 2022 (x64), CMake 3.22+.
- Viktige grensesnitt: Arv fra
ViewerBase(widget-implementering) og implementerViewerPluginInterface(IID"seer.plugin.interface.preview/3"). - Minimum appversjon: SDK v3-tillegg må deklarere
"appMinVersion": "4.2.9".
Referanseprosjekter
| Prosjekt | Formål |
|---|---|
| F3DViewer | 3D-modellvisning og panoramavisning |
| OfficeViewer | Office-dokumenter og CAD-tegninger |
| FontViewer | Skrifttypeinspeksjon og -visning |
| JsonTreeViewer | Høyytelses interaktivt JSON-tre |
| Collections | Alle offisielle tillegg og fellesskapstillegg |
Kontroll-tillegg
Kontroll-tillegg legger til egendefinerte handlingsknapper på venstre side av den nedre kontrollinjen i forhåndsvisningsvinduet, noe som muliggjør raske handlinger og integrasjon med eksterne verktøy for den aktive filen eller mappen.
Bygg et kontroll-tillegg med en KI-agent
Erstatt plassholderen nedenfor, og gi deretter den fullstendige instruksjonen til kodingsagenten din:
Les og følg Seer-utviklingsveiledningen for kontrolltillegg på https://raw.githubusercontent.com/ccseer/Seer-Controls/refs/heads/main/plugin_development_guide.md. Behandle den som den eneste sannhetskilden for arkitektur, plugin.json, implementering, validering og pakking. Hvis veiledningen ikke er tilgjengelig, stopp og rapporter det før du fortsetter.
Før du gjør noe arbeid, inspiser Requirement (Krav) nedenfor. Hvis det mangler, er uendret plassholdertekst, eller for tvetydig til å implementeres, still ett avklarende spørsmål og vent. Ikke gjett det manglende kravet.
Når det er avklart, implementer et fullstendig, installerbart kontrolltillegg som overholder Canonical v1-prosesskontrakten i gjeldende arbeidsområde. Ikke endre Seer i seg selv eller stopp ved en plan eller kodeutdrag.
Følg hvert gjeldende valideringstrinn i veiledningen og rapporter de faktiske resultatene.
Requirement: [ERSTATT DENNE PLASSHOLDEREN med kravet til kontrolltillegget ditt, f.eks. åpne VS Code i gjeldende mappe eller kopier absolutt bane til utklippstavlen]
Arkitektur og kontrakt
- Prosessmodell: Implementerer Canonical v1-prosesskontrakten (
backend: "process",capabilities: ["control"]). Seer kjører hjelpeprogrammet via CLI. - Returstatus og feilrapportering:
- Vellykket: Prosessen avsluttes med kode
0(eller samsvarer medsuccess_exit_codes). Hvis"close_after_success": trueer konfigurert, lukker Seer automatisk forhåndsvisningsvinduet etter vellykket kjøring. - Feil: Prosessen avsluttes med en kode ulik null. Alt som skrives til standardfeil (
stderr), fanges opp av Seer og vises som et Toast-feilvarsel i appen.
- Vellykket: Prosessen avsluttes med kode
- Brukergrensesnitt og interaksjon: Kontroll-tillegg tegner ikke egne permanente hovedvinduer. Vanlige hjelpeprogrammer utfører bakgrunnsoppgaver, kopierer tekst til utklippstavlen eller åpner opprinnelige dialoger i Windows (f.eks. Åpne med, Egenskaper, Del).
Kommandolinje-plassholdere
Et kontroll-tillegg mottar kun målbanen — ${input_file} pluss de universelle plassholderne (${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}) som er oppført i den felles delen Plassholdere og samsvarskoder nedenfor.
${output_dir}, ${output_file} og ${no_cache} blir avvist i et manifest for kontrolltillegg. Et kontrolltillegg som trenger en midlertidig plassering, må løse dette selv: først sin egen programkatalog, deretter systemets midlertidige mappe.
plugin.json-eksempler (Control)
Eksempel 1: Mappehandling (Terminal Here)
Konfigurasjon for det offisielle Terminal Here-tillegget:
{
"schema_version": 1,
"id": "io.1218.seer.terminal-here",
"name": "Terminal Here",
"description": "Opens a terminal window in the current folder.",
"version": "1.0.0",
"appMinVersion": "4.5.10",
"backend": "process",
"capabilities": [
"control"
],
"extensions": [
"${type_folder}"
],
"command": "terminal_here.exe",
"arguments": [
"--input",
"${input_file}"
],
"close_after_success": false,
"timeout_ms": 150000,
"success_exit_codes": [
0
]
}
Eksempel 2: Filhandling (Explorer Open With)
Konfigurasjon for det offisielle Explorer Open With-tillegget:
{
"schema_version": 1,
"id": "io.1218.seer.explorer-open-with",
"name": "Open With",
"description": "Opens the Windows Open With dialog for the current file.",
"version": "1.1.0",
"appMinVersion": "4.5.10",
"backend": "process",
"capabilities": [
"control"
],
"extensions": [
"${type_file}"
],
"command": "shellopenwith.exe",
"arguments": [
"--input",
"${input_file}",
"${use_backslash}"
],
"timeout_ms": 30000,
"success_exit_codes": [
0
]
}
Hvis du vil lukke forhåndsvisningsvinduet automatisk etter fullført kjøring, setter du "close_after_success": true i manifestet.
For kildekoden til offisielle kontrolltillegg, se: ccseer/Seer-Controls.
Egenskaps-tillegg
Egenskaps-tillegg utvider Seers motor for inspeksjon av metadata. Når en bruker trykker Ctrl + I på en forhåndsvist fil eller mappe (eller åpner egenskapsvinduet), vil samsvarende egenskapstillegg hente ut og vise strukturerte metadata og grafiske oscilloskoper/diagrammer.
Bygg et egenskaps-tillegg med en KI-agent
Erstatt plassholderen nedenfor, og gi deretter den fullstendige instruksjonen til kodingsagenten din:
Les og følg Seer-utviklingsveiledningen for egenskapstillegg på https://raw.githubusercontent.com/ccseer/Seer-Properties/refs/heads/main/plugin_development_guide.md. Behandle den som den eneste sannhetskilden for arkitektur, plugin.json, implementering, validering og pakking. Hvis veiledningen ikke er tilgjengelig, stopp og rapporter det før du fortsetter.
Før du gjør noe arbeid, inspiser Requirement (Krav) nedenfor. Hvis det mangler, er uendret plassholdertekst, eller for tvetydig til å implementeres, still ett avklarende spørsmål og vent. Ikke gjett det manglende kravet.
Når det er avklart, implementer et fullstendig, installerbart egenskapstillegg som overholder Canonical v1-prosesskontrakten og Schema 1 JSON-spesifikasjonen i gjeldende arbeidsområde. Ikke endre Seer i seg selv eller stopp ved en plan eller kodeutdrag.
Følg hvert gjeldende valideringstrinn i veiledningen og rapporter de faktiske resultatene.
Requirement: [ERSTATT DENNE PLASSHOLDEREN med kravet til egenskapstillegget ditt, f.eks. hente ut og vise detaljerte parametere for lyd-/videokodeker og bithastighet for MP4-filer]
Arkitektur og kontrakt
- Prosessmodell: Implementerer Canonical v1-prosesskontrakten (
backend: "process",capabilities: ["property"],result_schema: 1). - CLI-kall: Verten sender:
--input "${input_file}" --output "${output_file}" --output-dir "${output_dir}" - Publisering av utdata:
- Verten utvider
${output_file}til en basisbane uten filtype (f.eks.<requestDir>/<md5>). - Tillegget må skrive sitt JSON-resultat til
<output-base>.json(det vil si${output_file}.json). - Visuelle vedlegg (diagrammer, histogrammer, vektorskoper) må lagres i
${output_dir}. - Begrensning:
${no_cache}er forbudt for egenskapstillegg.
- Verten utvider
- Retningslinjer for returkoder:
- Forventede domenestatuser (f.eks. usignert fil, ikke et git-arkiv, tomme metadata) må avsluttes med kode
0og beskrive statusen i JSON. - Avslutt med kode ulik null kun ved uopprettelige feil eller ugyldige anrop (avslutning ulik null fører til at verten tømmer forespørselsmappen).
- Forventede domenestatuser (f.eks. usignert fil, ikke et git-arkiv, tomme metadata) må avsluttes med kode
Kommandolinje-plassholdere
| Plassholder | Beskrivelse | Eksempel |
|---|---|---|
${output_file} |
Vertstildelt basisbane uten filtype; resultatet må skrives til ${output_file}.json. |
C:\Users\...\request_dir\md5_hash |
${output_dir} |
Vertstildelt forespørselsmappe for vedlegg (diagrammer, bilder). | C:\Users\...\request_dir |
I tillegg kommer de universelle plassholderne som er oppført i den felles delen Plassholdere og samsvarskoder nedenfor, som også dekker ${type_*}-samsvarskodene. ${no_cache} avvises for egenskapstillegg.
Spesifikasjon for resultat-JSON (Schema 1)
Resultatfilen ${output_file}.json må være gyldig UTF-8 JSON som inneholder result_schema: 1 og et data-objekt:
1. Flate rader (Flat Rows)
Kun når hele resultatet er en enkelt rad (f.eks. SHA-256):
{
"result_schema": 1,
"data": {
"SHA-256": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
}
}
2. Undergruppe med sortert matrise av objekter med én nøkkel (Standard)
Alt som produserer mer enn én rad må publiseres som nøyaktig én undergruppe oppkalt etter tillegget – løse rader på toppnivå kolliderer med radene til alle andre tillegg, som inspektøren viser i én liste. Matriserekkefølgen er visningsrekkefølgen, så dette er den eneste formen der tillegget kan bestemme rekkefølgen radene vises i:
{
"result_schema": 1,
"data": {
"Git": {
"value": [
{ "Repository": "ccseer/Seer-Properties" },
{ "Branch": "main" },
{ "Status": "Clean" }
]
}
}
}
3. Undergruppe med et verdiobjekt
value kan også være et vanlig objekt, men radene gjengis i nøkkelrekkefølgen til det parsede objektet, som tillegget ikke kan kontrollere. Bruk det bare når radrekkefølgen ikke er viktig:
{
"result_schema": 1,
"data": {
"Git": {
"value": {
"Branch": "main",
"Status": "Working tree clean"
}
}
}
}
4. Grafiske diagrammer og oscilloskoper (Bildevedlegg)
Lagre genererte PNG-diagrammer i ${output_dir}, og deklarer dem med {"type": "image", "value": "relative_filename.png"}:
{
"result_schema": 1,
"data": {
"Image Scopes": {
"value": [
{ "RGB Histogram": { "type": "image", "value": "histogram.png" } },
{ "Luma Waveform": { "type": "image", "value": "waveform.png" } }
]
}
}
}
plugin.json-eksempel (Property)
{
"schema_version": 1,
"id": "io.1218.seer.git-info",
"name": "Git Info",
"description": "Reports repository information for the current folder using Git.",
"version": "1.0.0",
"appMinVersion": "4.5.10",
"backend": "process",
"capabilities": [
"property"
],
"extensions": [
"${type_folder}"
],
"invocations": {
"property": {
"command": "git_info.exe",
"arguments": [
"--input",
"${input_file}",
"--output",
"${output_file}",
"--output-dir",
"${output_dir}"
],
"result_schema": 1,
"timeout_ms": 30000,
"success_exit_codes": [
0
]
}
}
}
For kildekoden til offisielle egenskapstillegg, se: ccseer/Seer-Properties.
Plassholdere og samsvarskoder
Seer utvider disse kodene i arguments. Hvilke plassholdere en funksjon har lov til å bruke, valideres av verten når manifestet lastes inn — en kode som ikke støttes gir en innlastingsfeil for manifestet, ikke en kjøretidsadvarsel.
Tilgjengelig for alle funksjoner
| Plassholder | Beskrivelse | Eksempel |
|---|---|---|
${input_file} |
Absolutt bane til filen eller mappen som forhåndsvises. | C:\Docs\sample.pdf |
${use_backslash} |
Valgfritt flagg for å formatere baneskilletegn med opprinnelige Windows-omvendte skråstreker (\). |
${use_backslash} |
${seer_dir} |
Mappe som inneholder Seer.exe. |
C:\Program Files\Seer |
${seer_exe} |
Absolutt bane til Seer.exe. |
C:\Program Files\Seer\Seer.exe |
${seerviewer_exe} |
Absolutt bane til SeerViewer.exe. |
C:\Program Files\Seer\SeerViewer.exe |
${7z} |
Absolutt bane til 7z.exe som følger med Seer. |
C:\Program Files\Seer\plugins\7z.exe |
${theme} |
Gjeldende Seer-tema, expanderes til dark eller light. En dataplassholder som ikke kan brukes som hele command. |
dark |
${lang} |
Gjeldende Seer-språk, expanderes i BCP-47-format (f.eks. en, zh-CN). En dataplassholder som ikke kan brukes som hele command. |
en |
${screenshot} |
Absolutt bane til et midlertidig PNG-skjermbilde av gjeldende visning. | C:\Users\Username\AppData\Local\Temp\Seer\screenshot\view_1.png |
Funksjonsspesifikke plassholdere
| Plassholder | Viser (Preview) | Kontroll (Control) | Egenskap (Property) |
|---|---|---|---|
${output_file} |
Grunnleggende utdatabane; legg til ønsket filtype, f.eks. ${output_file}.html |
Støttes ikke | Grunnleggende bane uten filtype; resultatet må skrives til ${output_file}.json |
${output_dir} |
Støttes ikke | Støttes ikke | Forespørselsmappe for vedlegg (diagrammer, bilder) |
${no_cache} |
Deaktiverer hurtigbufring og lagrer utdata i mappen for automatisk sletting | Støttes ikke | Støttes ikke |
Et kontroll-tillegg mottar kun målbanen. Hvis det trenger en midlertidig lagringsplass, må det finne en selv: først sin egen programkatalog, deretter systemets midlertidige mappe.
extensions samsvarskoder
I tillegg til standard filtyper (f.eks. ["png", "zip"]), godtar extensions koder som matcher brede kategorier. Disse gjelder for tillegg som deklarerer extensions (kontroll- og egenskapstillegg); konverteringstillegg deklarerer formats i stedet og bruker dem ikke.
| Kode | Beskrivelse |
|---|---|
${type_folder} |
Matcher mapper og kataloger. |
${type_file} |
Matcher alle filer (inkludert filer uten filtype). |
${type_all} |
Matcher alt (både filer og mapper). |
${type_image} |
Matcher bilder som støttes av Seers innebygde bildeviser. |
${type_media} |
Matcher lyd- og videoformater. |
${type_web} |
Matcher nettsidefiler som HTML og Markdown. |
${type_text} |
Matcher tekst-, kode- og konfigurasjonsfiler. |
${type_pdf} |
Matcher PDF-dokumenter. |
${type_none} |
Matcher filer utenfor kategoriene over (f.eks. arkiver, kjørbare filer). |
Pakking og testing i appen
Når tillegget er utviklet, må det pakkes i et standard ZIP-arkiv for installasjon. Dette gjelder for alle typer tillegg.
Pakkestandarder
- Pakkedokumentasjon: Hver frittstående kontroll- eller egenskapspakke bør inneholde en
PACKAGE_README.md(beskrivelse pluss## Options & Arguments-tabell), plassert somREADME.mdi rotmappen av pakken. - Flat rotstruktur: For kontroll- og egenskapspakker (Canonical v1) må
plugin.json, den kjørbare filen/skriptet,README.mdog kjøretidsavhengigheter ligge direkte i rotmappen til arkivet. Ikke pakk dem inn i en ekstra undermappe, og bland aldri flate og nestede oppføringer — verten avviser et arkiv med tvetydig pakkerot.Eldre konverteringstillegg installert fra nettkatalogen bruker motsatt struktur: en toppmappe
<arkivnavn>/som pakker inn filene. Følg veiledningen for konverteringstillegg for dette tilfellet; de to strukturene kan ikke byttes om. - Maksimal komprimering: 7-Zip med maksimal Deflate-komprimering anbefales:
powershell 7z a -tzip -mx=9 my-plugin-1.0.0.zip .\*
Lokal testing i appen
- Åpne Seer-innstillingene og gå til målområdet:
- Viser-tillegg:
Innstillinger > Programtillegg-> fanen Lokal - Kontroll-tillegg:
Innstillinger > Kontroller - Egenskaps-tillegg:
Innstillinger > Egenskaper
- Viser-tillegg:
- Klikk på + under listen og velg
.zip-arkivet (ellerplugin.jsonfra den lokale utviklingsmappen). - Seer validerer og laster automatisk inn pakken. Kontroller innstillingene og klikk på OK for å aktivere.