### 3.4. Uw eerste script voor Script-Fu

Do you not need to stop and catch your breath? No? Well then, let's proceed with your fourth lesson — your first Script-Fu Script.

#### 3.4.1. Een script voor een tekstvak maken

Een van de meest voorkomende bewerkingen die ik uitvoer in GIMP is het maken van een vak met wat tekst erin voor een webpagina, een logo of wat dan ook. U weet echter meestal niet precies hoe groot de initiële afbeelding te maken als u begint. U weet niet hoeveel ruimte de tekst zal vullen met het lettertype en de grootte die u wilt.

Dat probleem kan worden opgelost met geautomatiseerd met Script-Fu.

We zullen daarom een script maken, genaamd Text Box, dat een op de juiste grootte gemaakt afbeelding maakt om soepel te passen rondom een regel tekst die de gebruiker invoert. We zullen ook de gebruiker het lettertype, de grootte van het lettertype en de tekstkleur laten kiezen.

#### 3.4.2. Uw scripts bewerken en opslaan

Tot nu hebben we gewerkt in de Script-Fu Console. We gaan nu echter overschakelen naar het bewerken van bestanden met scripts. Bestanden met scripts zouden platte tekstbestanden moeten zijn die u kunt bewerken in een tekstbewerker. De naam die u geeft is niet zo belangrijk, behalve om het script te kunnen herkennen. U zou uw script de extensie “.scm” moeten geven.

Waar u uw scripts plaatst is een kwestie van voorkeur. In GIMP's voorkeuren Mappen kunt u zien in welke mappen GIMP zoekt naar scripts. Het is ook mogelijk om daar een nieuwe map toe te voegen. De map waar GIMP zijn eigen scripts opslaat is gewoonlijk niet de beste keuze voor uw scripts, maar voor de rest kunt u uitkiezen wat u wilt.

#### 3.4.3. De pure essentiële dingen

Elk script voor Script-Fu definieert ten minste een functie, wat de hoofdfunctie van het script is. Dat is waar u het werk doet.

Elk script moet zich ook registreren bij de procedurele database, zodat u er toegang toe heeft binnen GIMP.

We zullen eerst de hoofdfunctie definiëren:

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

Here, we've defined a new function called `script-fu-text-box` that takes four parameters, which will later correspond to some text, a font, the font size, and the text's color. The function is currently empty and thus does nothing. So far, so good — nothing new, nothing fancy.

#### 3.4.4. Conventies voor het geven van namen

De conventies voor het geven van namen in Scheme lijken een voorkeur te hebben voor kleine letters met afbreekstreepjes, die ik heb gevolgd bij het geven van een naam aan de functie. Ik ben echter van de conventie afgeweken voor wat betreft de parameters. Ik hou meer van beschrijvende namen voor mijn parameters en variabelen en dus voeg in het voorvoegsel "in" toe aan de parameters, zodat ik snel kan zien dat zij waarden zijn die worden ingevoegd in het script, in plaats van er binnen gemaakt worden. Ik gebruik het voorvoegsel "the" voor variabelen die binnen het script worden gedefinieerd.

Het is een conventie van GIMP om uw functies voor scripts `script-fu-abc` te noemen, omdat, als zij worden vermeld in de procedurele database, zij allemaal staan onder Script-Fu als u de functies vermeld. Dat helpt ook om ze te onderscheiden van plug-ins.

#### 3.4.5. De functie registreren

Dan, laten we de functie registreren bij GIMP. Dat wordt gedaan door de functie `script-fu-register`. Als GIMP in een script leest, zal het die functie uitvoeren, die het script registreert in de procedurele database. U kunt deze aanroep naar de functie plaatsen waar u wilt in uw script, maar ik plaats het gewoonlijk aan het einde, na al mijn andere code.

Hier is de code voor het registreren van deze functie (ik zal al deze parameters later uitleggen):

      (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>/Filters/Tutorial")

Sla deze functies op in een tekstbestand met het achtervoegsel `.scm` in een submap van uw map voor scripts, met dezelfde naam als uw scriptbestand, en herstart dan GIMP. Het nieuwe script zal verschijnen als Filters → Tutorial → Text Box.

Als u dit nieuwe script activeert, zal het niets doen, natuurlijk, maar u kunt de vragen zien die u hebt gemaakt bij het registreren van het script (meer informatie over wat we deden wordt hierna behandeld).

Tenslotte, als u de Procedureverkenner ( Help → Procedureverkenner) activeert, zult u merken dat ons script nu in de database verschijnt.

#### 3.4.6. Stappen voor het registreren van het script

Voor het registreren van ons script bij GIMP, roepen we de functie `script-fu-register` aan, vullen de zeven vereiste parameters in en voegen de eigen parameters van ons script toe, samen met een beschrijving en een standaard waarde voor elke parameter.

De vereiste parameters

- De naam van de functie die we hebben gedefinieerd. Dit is de functie die wordt aangeroepen als ons script wordt geactiveerd (het invoerpunt voor ons script). Dit is noodzakelijk omdat we aanvullende functies in hetzelfde bestand zouden kunnen definiëren en GIMP moet weten welk van deze functies aan te roepen. In ons voorbeeld hebben we slechts een functie gedefinieerd, tekst-vak, die we hebben geregistreerd.

- Het menulabel is de naam die in het menu zal worden weergegeven. Voor het specificeren van de locatie, bekijk Paragraaf 3.4.9, “Registreren van de locatie in het menu”.

- Een beschrijving van uw script, om te worden weergegeven in de Procedureverkenner.

- Uw naam (de auteur van het script).

- Auteursrecht informatie.

- De datum waarop het script werd gemaakt, of de laatste revisie van het script.

- The types of images the script works on. This may be any of the following: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Or it may be none at all — in our case, we're creating an image, and thus don't need to define the type of image on which we work.

#### 3.4.7. Registreren van de parameters van het script

Als we eenmaal de vereiste parameters hebben vermeld, moeten we vervolgens de parameters vermelden die corresponderen met de parameters die ons script nodig heeft. Wanneer we de parameters vermelden, geven we hints over wat hun typen zijn. Dat is voor het dialoogvenster dat naar voren komt als de gebruiker ons script selecteert. We verschaffen ook een standaard waarde.

Dit gedeelte van het proces voor registreren heeft de volgende indeling:

Type parameter | Omschrijving | Voorbeeld
--- | --- | ---
`SF-IMAGE` | Als uw script werkt op een geopende afbeelding, zou dit de eerste parameter moeten zijn na de vereiste parameters. GIMP zal een verwijzing doorgeven naar deze afbeelding in deze parameter. | 3
`SF-DRAWABLE` | Als uw script werkt op een geopende afbeelding, zou dit de tweede parameter moeten zijn na de parameter `SF-IMAGE`. Het verwijst naar de actieve laag. GIMP zal een verwijzing doorgeven naar de actieve laag in deze parameter. | 17
`SF-STRING` | Accepteert tekenreeksen. | "Enige tekst"
`SF-COLOR` | Geeft in deze parameter aan dat een kleur is vereist. | '(0 102 255)
`SF-TOGGLE` | Een keuzevak wordt weergegeven om een Booleaanse waarde te krijgen. | TRUE of FALSE

#### 3.4.8. De Script-Fu parameter API[5]

| Opmerking
Naast de hierboven vermelde typen parameters zijn er nog meer types voor de interactieve modus, elk van hen zal een widget maken in het dialoogvenster besturingselement. U kunt een lijst met deze parameters met beschrijvingen en voorbeelden vinden in het testscript `plug-ins/script-fu/scripts/test-sphere-v3.scm`, dat is gevoegd bij de broncode van GIMP.

Type parameter | Omschrijving
--- | ---

`SF-ADJUSTMENT`

Maakt een widget Aanpassen in het dialoogvenster.

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

Lijst met argumenten voor widget

Element | Omschrijving
--- | ---
"label" | Tekst, afgedrukt voor het widget.
value | Afgedrukte waarde aan het begin.
lower / upper | De laagste / hoogste waarde (bereik naar keuze).
step_inc | Waarde voor verhogen/verlagen.
page_inc | Waarde voor verhogen/verlagen met pagina-toets.
digits | Getallen achter de komma (decimale gedeelte).
type | Een van: SF-SLIDER of 0, SF-SPINNER of 1

`SF-COLOR`

Maakt een knop voor een kleur in het dialoogvenster.

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

of

SF-COLOR "label" "color"

Lijst met argumenten voor widget

Element | Omschrijving
--- | ---
"label" | Tekst, afgedrukt voor het widget.
'(red green blue) | Lijst met drie waarden voor de rode, groene en blauwe componenten.
"color" | Naam van de kleur in CSS-notatie.

`SF-FONT`

Maakt een nieuw widget voor selecteren van een lettertype in het dialoogvenster. Het geeft de naam van een lettertype terug als een tekenreeks. Er zijn twee nieuwe procedures van gimp-text om het gebruiken van deze teruggegeven parameter te vergemakkelijken:

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

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

waar font de naam van het lettertype is die u krijgt. De grootte die is gespecificeerd in de naam van het lettertype wordt stilletjes genegeerd. Het wordt alleen gebruikt voor de selectie van het lettertype. U zult dus worden gevraagd een nuttige waarde in te voeren (24 pixels is een goede keuze).

SF-FONT "label" "fontname"

Lijst met argumenten voor widget

Element | Omschrijving
--- | ---
"label" | Tekst, afgedrukt voor het widget.
"fontname" | Naam van het standaard lettertype.

`SF-BRUSH`

Het zal een widget maken in het dialoogvenster besturingselement. De widget bestaat uit een voorbeeldgebied (dat, als erop wordt geklikt, een pop-upvoorbeeld zal maken) en een knop met het label "…". De knop zal een dialoogvenster naar voren brengen waar penselen kunnen worden geselecteerd en elk van de eigenschappen van het penseel kan worden aangepast.

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

Hier wordt het dialoogvenster penseel gemaakt, met een standaard penseel Circle (03) dekking 100 tussenruimte 44 en tekenmodus Normaal (value 0).

Als deze selectie niet zou worden gewijzigd, zou de aan de functie doorgegeven waarde, als een parameter, zijn '("Circle (03)" 100 44 0).

`SF-PATTERN`

Het zal een widget maken in het dialoogvenster besturingselement. De widget bestaat uit een voorbeeldgebied (dat, als erop wordt geklikt, een pop-upvoorbeeld zal maken) en een knop met het label "…". De knop zal een dialoogvenster naar voren brengen waar patronen kunnen worden geselecteerd.

SF-PATTERN "Pattern" "Maple Leaves"

De teruggegeven waarde als het script wordt uitgevoerd is een tekenreeks die de naam van het patroon bevat. Als de bovenstaande selectie niet werd gewijzigd zou de tekenreeks "Maple Leaves" bevatten.

`SF-GRADIENT`

Het zal een widget maken in het dialoogvenster besturingselement. De widget bestaat uit een knop die een voorbeeld van het geselecteerde kleurverloop bevat.

Als de knop wordt ingedrukt zal een dialoogvenster voor het selecteren van een kleurverloop worden weergegeven.

SF-GRADIENT "Gradient" "Deep Sea"

De teruggegeven waarde als het script wordt uitgevoerd is een tekenreeks die de naam van het kleurverloop bevat. Als de bovenstaande selectie niet werd gewijzigd zou de tekenreeks "Deep Sea" bevatten.

`SF-PALETTE`

Het zal een widget maken in het dialoogvenster besturingselement. De widget bestaat uit een knop die een voorbeeld van het geselecteerde palet bevat.

Als de knop wordt ingedrukt zal een dialoogvenster voor het selecteren van een palet worden weergegeven.

SF-PALETTE "Palette" "Named Colors"

De teruggegeven waarde als het script wordt uitgevoerd is een tekenreeks die de naam van het palet bevat. Als de bovenstaande selectie niet werd gewijzigd zou de tekenreeks "Named Colors" bevatten.

`SF-FILENAME`

Het zal een widget maken in het dialoogvenster besturingselement. De widget bestaat uit een knop die een vak voor de naam van een bestand bevat.

Als de knop wordt ingedrukt zal een dialoogvenster voor het selecteren van een bestand worden weergegeven.

SF-FILENAME "label" (string-append "" gimp-data-directory "/scripts/beavis.jpg")

De teruggegeven waarde als het script wordt uitgevoerd is een tekenreeks die de naam van het bestand bevat.

`SF-DIRNAME` | Alleen nuttig in interactieve modus. Lijkt heel veel op SF-FILENAME, maar de gemaakte widget maakt het mogelijk een map te selecteren in plaats van een bestand. SF-DIRNAME "label" "/var/tmp/images" De teruggegeven waarde als het script wordt uitgevoerd is een tekenreeks die de naam van de map bevat.
`SF-OPTION` | Het zal een widget maken in het dialoogvenster besturingselement. De widget is een combinatievak dat de opties weergeeft die doorgegeven kunnen worden, als een lijst. De eerste optie is de standaard keuze. SF-OPTION "label" '("option1" "option2") De teruggegeven waarde als het script wordt uitgevoerd is het nummer van de gekozen optie, waarbij de eerste optie als 0 wordt geteld.

`SF-ENUM`

Het zal een widget maken in het dialoogvenster besturingselement. De widget is een combinatievak dat alle genummerde waarden opgeeft voor het betreffende type enum. Dit moet de naam zijn van een geregistreerde enum, zonder het voorvoegsel "Gimp". De tweede parameter specificeert de standaard waarde, met de bijnaam van de waarde van de enum.

SF-ENUM "Interpolation" '("InterpolationType" "linear")

De teruggegeven waarde als het script wordt uitgevoerd correspondeert met de gekozen waarde voor enum.

#### 3.4.9. Registreren van de locatie in het menu

Als we ons script eenmaal hebben geregistreerd, moeten we GIMP vertellen waar het te vinden is in het menu.

De beste locatie in het menu voor uw script is afhankelijk van zijn functie. De meeste scripts zijn te vinden in de menu's Filters en Kleuren.

Voor het huidige script, dat een nieuwe afbeelding maakt, kiezen we voor een submenu van Filters → Tutorial. Dat is wat de regel met de functie `script-fu-menu-register` doet. Dus, we registreerden ons script Text Box hier: Filters → Tutorial → Text Box.

Elk submenu dat u in uw script specificeert en dat niet bestaat, zal automatisch worden gemaakt door GIMP.

[5] (Deze Handleiding kreeg nog geen prioriteit van de vertaler)

3.3. Lijsten, lijsten en nog meer lijsten |  | 3.5. Aanvullende functionaliteit toevoegen

Report a bug in GIMP Rapporteer een fout in de documentatie