3.4. Det første Script-Fu skriptet ditt

Dersom du ikkje har behov for ein pause for å få igjen pusten, burde du nå vere klar for den fjerde leksjonen — det første skriptet ditt i Script-Fu.

3.4.1. Vi lager eit skript for å lage tekstvindauge

Eg bruker gjerne GIMP for å lage boksar med litt tekst og/eller bilete i for heimesidene mine. Ulempen er at eg aldri veit på førehand kor stor denne boksen blir, og har dermed problem med å vite kor stort startvindauge må vere. Alt er avhengig av skrifttype, skriftstorleik og eventuelle andre ting som skal vere med.

Script-Fu-meisteren, og kanskje også studenten hans, har sjølvsagt oppdaga at dette problemet kan løysast og automatiserast ved hjelp av Script-Fu.

Vi vill derfor lage eit skript som vi kallar “Text Box”, og som lagar eit bilete i høveleg storleik for å passa pent rundt ei tekstlinje som brukaren skriv inn. Sjølvsagt kan brukaren også velja både type, storleik og farge for skrifta.

3.4.2. Å redigere og lagre skripta dine

Til nå har du arbeidd på Script-Fu konsollen. Nå går vi over til å skriva dei som tekstfiler.

Kvar du lagrar filene, er eigentleg likegyldig. Har du tilgang til GIMP sine skriptmapper, kan du legge skripta dine der. Det beste er likevel å halde skripta dine langt borte frå dei ferdiginstallerte skripta, og heller lagra dei i eigne skriptmapper.

I katalogen .gimp-2.2 (eller kva versjon du har) vil du finna ein underkatalog kalla scripts. Dette er ein god plass å legge skripta dine fordi GIMP søker gjennom denne katalogen og legg det som måtte finnast der inn i databasen for Script-Fu.

Du har kanskje oppdaga at eg tilsynelatande er litt vinglande i norsken i dette kapitlet. Grunnen er at det er vanleg, av omsyn til brukarane over heile verda, å skrive skripta på engelsk. Dermed blir det meste som går direkte inn i skriptet skrive på engelsk. Også ein del filnamn, mapper osv har engelske namn ganske enkelt fordi det er desse du finn i datamaskinen din.

3.4.3. Det essensielle

Kvart einaste Script-Fu skript må definera minst ein funksjon, og det er hovudfunksjonen for skriptet. Det er her du definerer kva skriptet skal gjere.

Alle skripta må også kunne registrerast i prosedyredatabasen slik at dei er tilgjengelege for GIMP.

Vi må altså først definera hovudfunksjonen:

        (define (script-fu-text-box inText inFont inFontSize inTextColor))
      

Setninga ovanfor definerer ein ny funksjon som vi har kalla script-fu-text-box. Funksjonen har i tillegg fire parametrar, som seinare vil bli tilordna noe tekst, (“inText”), ein skrifttype (“inFont”), ein skriftstorleik (“inFontSize”) og ein tekstfarge (“inTextColor”). (Eigentleg kunne vi like gjerne ha brukt norske namn her, men sjå ovanfor). Funksjonen vi har laga er førebels tom og gjer ikkje noe som helst. Så langt inkje nytt eller merkverdig.

3.4.4. Namnereglar

Eigentleg godtar Scheme fleire måtar å skriva namn på. Har du gode vanar med deg frå andre språk, kan du stort sett nytta desse. Som i alle (?) programmeringsspråk, kan du ikkje dele opp eit namn med mellomrom. I Scheme er det difor vanleg praksis å gjere samansette ord meir forståelege ved å dela dei opp med bindestrek (-) slik du ser det er brukt i funksjonsnamnet. Dette blir av mange også brukt i parameternamna. Her har eg likevel nytta ein annan metode, nemleg å markera dei ulike orda med stor bokstav. I tillegg legg eg inn eit “in” framføre for å markera at dette er inndata og ikkje noe som er lagt til seinare. (Eg har lagt med til den vanen å bruke prefikset “the” framføre variablar som blir kreerte inne i skriptet).

For at programma dine skal bli lista ut i funksjonsdatabasen som script-fu, og såleis ikkje bli blanda saman med tilleggsprogramma, er det tilrådd i GIMP å gi alle skripta namnet “script-fu-uniktNamn”. (Du forsto vel at “uniktNamn” er namnet du gir programmet?)

3.4.5. Å registrere funksjonen

Nå må vi registrera funksjonen vår i GIMP. Dette gjer vi ved å kalle opp funksjonen script-fu-register. Når GIMP les inn eit skript, vil denne funksjonen legge skriptet inn i prosedyredatabasen. Du kan eigentleg skrive inn dette funksjonsoppkallet kvar som helst i skriptet, men det er vanleg å setje det heilt på slutten, etter alle dei andre kodane.

HerHer er utlistinga av programbiten som registrerer denne funksjonen (forklaringa kjem etterpå):

        (script-fu-register
          "script-fu-text-box"                        ;func name
          "Text Box"                                  ;menu label
          "Creates a simple text box, sized to fit\
            around the user's choice of text,\
            font, font size, and color."              ;description
          "Michael Terry"                             ;author
          "copyright 1997, Michael Terry"             ;copyright notice
          "October 27, 1997"                          ;date created
          ""                     ;image type that the script works on
          SF-STRING      "Text:"         "Text Box"   ;a string variable
          SF-FONT        "Font:"         "Charter"    ;a font variable
          SF-ADJUSTMENT  "Font size"     '(50 1 1000 1 10 0 1)
                                                      ;a spin-button
          SF-COLOR       "Color:"        '(0 0 0)     ;color variable
        )
        (script-fu-menu-register "script-fu-text-box" "<Toolbox>/Xtns/Script-Fu/Text")
      

Dersom du lagrar dette i skriptkatalogen som ei tekstfil med filutvidinga .scm og deretter vel UtvidScript-FuOppdater skript, vil dette skriptet dukke opp i UtvidScript-FuTextText Box.

Førebels gjer dette skriptet naturleg nok ingenting. Einaste er at du ser korleis skriptet blir registrert i GIMP og få ein kontroll på at du har gjort alt rett så langt.

Dersom du aktiverer prosedyrelesaren ( UtvidProsedyrelesar) vil du finna at scriptet ditt nå er registrert i databasen.

3.4.6. Å registrere skriptet

For å registrera skriptet i GIMP, må vi skrive inn dei sju obligatoriske parametra, legge til skriptet sine eigne parametrar og ei beskriving av skriptet, og endeleg dei verdiane du ønskjer skriptet skal opnast med i dei variable parametra. Deretter kallar du opp funksjonen “script-fu-register” frå skriptet ditt.

Dei nødvendige parametra

  • Namnet på funksjonen. Dette er funksjonen som blir aktivisert når du kallar opp skriptet. Inngangen til skriptet, om du vil. Dette er heilt nødvendig fordi du kan definera mange funksjonar innan same fila, og GIMP må vita kva for funksjonar som skal kallast opp. I eksemplet definerte vi bare ein funksjon, “text-box”, som så blei registrert.

  • Adresse. Dette bestemmer kvar i menyen skriptet skal plasserast. Den eksakte adressa blir spesifisert på same måten som i Unix, med rot (startpunkt) anten i “Toolbox” eller i “right-click”.

    Dersom skriptet ditt ikkje arbeider på eit eksisterande bilete, men lagar sitt eige bilete slik “Text Box” kjem til å gjere, må du legge skriptet i menyen til Verktøyskrinet (“Toolbox”). Dette er hovudvindauget i GIMP der alle dei ulike verktøya er plasserte. Adressa blir altså slik vi har skrive ho inn i eksemplet.

    Skal skriptet derimot operera på eit eksisterande bilete, må du legge skriptet inn i ein meny som dukkar opp når du høgreklikkar (“right-click”) på eit ope bilete. Adressa blir då “right-clic/Xtns/Script-Fu/Text/Text Box”.

    Går vi tilbake til eksemplet, kan du sjå at skriptet “Text Box” blir registrert i “Text”-menyen til “Script-Fu”-menyen til menyen “Xtns” i “Toolbox”. (puh!) Altså: ExtsScript-FuTextText Box, eller på norsk: UtvidScript-FuTextText Box.

    Ikkje store skilnaden. Dersom du la merke til det, fann du kanskje ut at menyen Text ikkje fanst før vi la inn “Text Box”. GIMP lager automatisk nye menyar dersom det er behov for det.

  • Ei beskriving av skriptet slik det skal visast i prosedyrelesarren.

  • Namnet ditt (dvs. forfattaren av skriptet).

  • Copyright-informasjon.

  • Datoen skriptet blei laga eller sist revidert.

  • The Bilettypar skriptet kan brukast på. Dette kan vere RGB, RGBA, GRAY, GRAYA, INDEXED eller INDEXEDA. Eller ingen i det heile. I eksemplet er bilettypen ikkje definert fordi skriptet opnar sitt eige bilete.

3.4.7. Registrering av skriptparametra

Når vi endeleg er ferdige med dei obligatoriske parametra, er tida komen for dei skriptavhengige parametra. Når vi listar opp parametra for skriptet, tar vi også med kva for type dei er. Dette er for dialogvindauget som sprett opp når noen vel skriptet ditt. I tillegg treng vi også ein førehandsvald verdi for parametra. Den verdien programmet vil nytte om brukaren ikkje gjer endringar.

Dette avsnittet i registreringsprosessen har dette formatet:

Parametertype

Beskriving

Eksempel

SF-VALUE

Godtar tal og strengar. Merk at hermeteikn må markerast med \ framføre. Bruk heller SF-STRING.

42

SF-STRING

Godtar tekststrenger.

"Ein tekst"

SF-COLOR

Viser at her skal det vere ein fargeverdi

'(0 102 255)

SF-TOGGLE

Viser ein avkryssingsboks for å lesa inn ein logisk verdi

TRUE eller FALSE (sant/usant)

SF-IMAGE

Dersom skriptet skal arbeide på eit opna bilete, må dette vere det første parameteret etter dei obligatoriske param. GIMP vil legge inn referanse til biletet i dette parameteret.

3

SF-DRAWABLE

Dersom skriptet skal arbeide på eit opna bilete, må dette vere det andre parameteret etter parameteret SF-IMAGE. Refererer til eit ope lag. GIMP vil legge inn referanse til det aktive laget i dette parameteret.

17