3.4. Det første Script-Fu skriptet ditt
| 3. Ei innføring i Script-Fu |

### 3.4. Det første Script-Fu skriptet ditt

Du har kanskje hatt ein velfortent pause for å få igjen pusten? I alle fall burde du nå vere klar for den fjerde leksjonen — det første skriptet ditt i Script-Fu.

#### 3.4.1. Vi lager eit tekstboks-skript

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 til å 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

Up until now, we've been working in the Script-Fu Console. Now, however, we're going to switch to editing script files. Script files should be plain text files that you can edit in a text or code editor. The name you give is not that important, except for being able to recognize the script. You should give your script file the extension «.scm».

Where you place your scripts is a matter of preference. In GIMP's folder preferences you can see in which folders GIMP looks for scripts. It is also possible to add a new folder there. The folder where GIMP stores its own scripts is usually not the best choice for your scripts, but for the rest feel free to choose what suits you best.

#### 3.4.3. Det essensielle

Kvart einaste skript i Script-Fu 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 tar fire parametrar, som seinare vert tilordna noko tekst («inText»), ein skrifttype («inFont»), ein skriftstorleik («inFontSize») og ein tekstfarge («inTextColor»). (Eigentleg kunne vi like gjerne ha brukt norske namn her, men i programmering er det vanleg å bruke engelske namn slik at programmet er forståeleg også for andre). Funksjonen vi har laga er førebels tom og gjer ikkje noko 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 vert 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 noko som er lagt til seinare. (Eg har lagt med til den vanen å bruke prefikset «the» framføre variablar som vert oppretta inne i skriptet).

GIMP vil helst gi skriptfunksjonane namnet `script-fu-abc` slik at dei vert lista ut under Script-Fu i prosedyredatabasen. Dette også for å skilje dei frå programtillegg.

#### 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.

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

      (script-fu-register
        "script-fu-text-box"                        ;function 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;\
          2009, the GIMP Documentation Team"        ;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" "<Image>/File/Create/Text")

Dersom du lagrar dette i skriptkatalogen som ei tekstfil med filutvidinga `.scm` og deretter vel Filter → Script-Fu → Oppdater skript, vil dette skriptet dukke opp i Fil → Hent inn → Text → Text Box.

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

Dersom du aktiverer prosedyrelesaren ( Hjelp → Prosedyrelesar) 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 vert aktivert 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 berre ein funksjon, «text-box», som så vart registrert.

- The menu label is the name that will be shown in the menu. In previous versions of GIMP you could specify the menu location here, but that has changed. How to specify the location will be shown below.

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

- Namnet ditt (dvs. forfattaren av skriptet).

- Copyright-informasjon.

- Datoen skriptet vart laga eller sist revidert.

- Bilettypar skriptet kan brukast på. Dette kan vere RGB, RGBA, GRAY, GRAYA, INDEXED eller INDEXEDA. Eller ingen i det heile. I dette tilfellet oppretter skriptet sitt eige bilete, og treng såleis ikkje definere bilettype.

#### 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 nokon 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 | Penselnamn | Eksempel
--- | --- | ---
`SF-IMAGE` | Dersom skriptet skal arbeide på eit opna bilete, må dette vere det første parameteret etter dei obligatoriske parametra. 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. Det refererer til eit aktivt lag. GIMP vil legge inn referanse til det aktive laget i dette parameteret. | 17
`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)

#### 3.4.8. Script-Fu-parameter API[6]

| Notat
Utanom dei parametertypane som er nemnde ovanfor, finst det også ei samling parametrar for interaktiv modus. Kvar av desse vil lage eit skjermelement («widget») i kontrolldialogen. Du kan finne ei beskriving av desse parametra og eksempel på bruk av dei i testskriptet `plug-ins/script-fu/scripts/test-sphere.scm` som følgjer med kjeldekodene for GIMP.

Parametertype | Penselnamn
--- | ---

`SF-ADJUSTMENT`

Oppretter eit justeringselement i dialogen.

SF-ADJUSTMENT "label" '(value lower upper step_inc page_inc digits type)

Argumentliste for skjermelementet

Element | Penselnamn
--- | ---
«merkelapp» | Teksten framføre skjermelementet.
verdi | Startverdi.
Øvre/nedre | lower / upper : nedre/øvre grenseverdi (område for vala).
step_inc | step_inc : Kor mykje auking/minking for kvart steg.
page_inc | page_inc : Kor mykje auking/minking ved bruk av «page key».
siffer | digits : kor mange desimalar.
type | Anten SF-SLIDER, 0, SF-SPINNER eller 1

`SF-COLOR`

Oppretter ein fargeknapp i dialogvindauget.

SF-COLOR "label" '(red green blue)

eller

SF-COLOR "label" "color"

Argumentliste for skjermelementet

Element | Penselnamn
--- | ---
«merkelapp» | Teksten framføre skjermelementet.
'(red green blue) | Liste med ein verdi for kvar av komponentane raud, grøn og blå.
"color" | Color name in CSS notation.

`SF-FONT`

Oppretter eit område for å velje skrifttype. Namnet på skrifttypen vert returnert som ein streng. Det er oppretta to nye tekstprosedyrar for å forenkla bruken av desse returparametra:

(gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font)

(gimp-text-get-extents-fontname text size unit font)

der fontname er namnet på skrifttypen. Storleiken som vert spesifisert i skriftnamnet vert ignorert. Denne verdien vert berre brukt i skrifttypeveljaren. Difor bør du helst setje denne til ein førehandvald verdi, for eksempel 24.

SF-FONT "label" "fontname"

Argumentliste for skjermelementet

Element | Penselnamn
--- | ---
«merkelapp» | Teksten framføre skjermelementet.
"fontname" | Namn på standardskrift

`SF-BRUSH`

Denne vil opprette eit område i kontrolldialogen som du kan klikke på for å få opp ei førehandsvising. Det vert også laga ein «...»-knapp. Når du klikkar på denne, kjem det opp ein meny der du kan velje pensel og endre innstillingane for denne.

SF-BRUSH "Brush" '("Circle (03)" 100 44 0)

Penseldialogen vert førehandssett med verdiane for "Circle (03)" dekkevne = 100, avstand = 44 og normal skrivemodus (verdi = 0).

Dersom du ikkje gjer endringar i denne, vil verdiane som vert sende vidare som parametrar til funksjonen vere '("Circle (03)" 100 44 0).

`SF-PATTERN` | Denne vil opprette eit område i kontrolldialogen som du kan klikke på for å få opp ei førehandsvising av mønsterelementa. Det vert også laga ein «...»-knapp. Når du klikkar på denne, kjem det opp ein meny der du kan velje mønsterelement. SF-PATTERN "Pattern" "Maple Leaves" Denne vil returnere ein streng med namnet på mønsterelementet. I dette tilfellet «Maple Leaves».
`SF-GRADIENT` | Oppretter eit område i kontrolldialogen med ein knapp som inneheld ei førehandsvising av den valde fargeovergangen. Dersom du klikkar på knappen, kjem det opp ein dialog der du kan velje fargeovergang. SF-GRADIENT "Gradient" "Deep Sea" Denne vil returnere ein streng med namnet på fargeovergangen. I dette tilfellet «Deep Sea».
`SF-PALETTE` | Oppretter eit område i kontrolldialogen med ein knapp som inneheld namnet på den valde paletten. Klikk på knappen for å opna dialogen for å velje palett. SF-PALETTE "Palette" "Named Colors" Denne vil returnere ein streng med namnet på paletten. I dette tilfellet «Named Colors».
`SF-FILENAME` | Oppretter eit område i kontrolldialogen med ein knapp som inneheld eit filnamn. Klikk på knappen for å opna dialogen for å velje fil. SF-FILENAME "label" (string-append "" gimp-data-directory "/scripts/beavis.jpg") Denne vil returnere ein streng med filnamnet.
`SF-DIRNAME` | Berre brukbar i interaktiv modus. Liknar svært på SF-FILENAME, men du kan velje ein katalog i staden for ei fil. SF-DIRNAME "label" "/var/tmp/images" Denne vil returnere ein streng med katalognamnet.
`SF-OPTION` | Oppretter eit område i kontrolldialogen med ein kombinasjonsboks som viser dei valde innstillingane på listeform. Den første innstillinga er den førehandsvalde. SF-OPTION "label" '("option1" "option2") Returverdien er nummeret for den valde innstillinga. Teljinga byrjar frå 0.
`SF-ENUM` | It will create a widget in the control dialog. The widget is a combo-box showing all enum values for the given enum type. This has to be the name of a registered enum, without the "Gimp" prefix. The second parameter specifies the default value, using the enum value's nick. SF-ENUM "Interpolation" '("InterpolationType" "linear") Returverdien tilsvarer den valde listeverdien.

#### 3.4.9. Registering the Menu Location

Once we have registered our script, we need to tell GIMP where it should be found in the menu.

The best menu location of your script depends on its function. Most scripts are found in the Filters and Colors menus.

For the current script, which creates a new image, we choose a submenu of File → Create. This is what the line with the `script-fu-menu-register` function does. Thus, we registered our Text Box script here: File → Create → Text → Text Box.

Du la kanskje merke til at text-undermenyen i Fil - Hent inn ikkje var der til å byrje med. GIMP oppretter nye menyar automatisk.

Figur 13.2. Menyen for skriptet ditt.

[6] Denne beskrivinga er ikkje med i originalversjonen.

3.3. Lister, lister og atter lister |  | 3.5. Blås liv i skriptet

Report a bug in GIMP Report a documentation error