### 3.4. Ditt första Script-Fu-skript

Behöver du stanna och hämta andan? Inte? Då fortsätter vi med din fjärde lektion ditt första Script-Fu-skript.

#### 3.4.1. Skapa ett textruteskript

En av de vanligaste operationer jag utför i GIMP är att skapa en ruta med lite text i för en webbsida, en logotyp eller vad det nu kan vara. Du vet dock aldrig riktigt hur stor du vill göra den ursprungliga bilden då du startar. Du vet inte hur mycket utrymme texten kommer fylla med typsnittet och storleken som du vill ha.

Detta problem kan lösas och automatiseras med Script-Fu.

Vi kommer därför skapa ett skript som vi kallar Text Box, vilket skapar en bild som har rätt storlek för att passa precis runt en textrad som användaren matar in. Vi kommer också låta användaren välja typsnittet, typsnittsstorleken och textfärgen.

#### 3.4.2. Redigera och lagra dina skript

Så här långt har vi arbetat i Script-Fu-konsolen. Nu ska vi dock växla till att redigera skriptfiler. Skriptfiler bör vara klartextfiler som du kan redigera i en text- eller kodredigerare. Namnet du ger är inte så viktigt, förutom för att kunna känna igenom skriptet. Du bör ge din skriptfil filändelsen ”.scm”.

Var du placerar dina skript är en smaksak. I GIMPs mappinställningar kan du se i vilka mappar GIMP letar efter skript. Det är också möjligt att lägga till en ny mapp där. Mappen där GIMP lagrar sina egna skript är vanligen inte det bästa valet för dina skript, men i övrigt är du fri att välja vad som passar dig bäst.

#### 3.4.3. De nakna grunderna

Varje Script-Fu-skript definierar minst en funktion som är skriptets huvudfunktion. Det här är var du gör jobbet.

Varje skript måste också registrera sig mot procedurdatabasen så du kan komma åt det inuti GIMP.

Vi kommer definiera huvudfunktionen först:

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

Här har vi definierat en ny funktion som heter `script-fu-text-box` som tar fyra parametrar, vilka sedan kommer motsvara lite text, ett typsnitt, typsnittsstorleken och textens färg. Funktionen är för närvarande tom och gör därmed ingenting. Allt väl så långt inga nyheter, inget speciellt.

#### 3.4.4. Namnstandarder

Schemes namnkonventioner verkar föredra gemener med bindestreck, vilket jag följt i namngivandet av funktionen. Jag har dock avvikit från konventionen med parametrarna. Jag gillar mer beskrivande namn för mina parametrar och variabler, och lägger därför till prefixet ”in” till parametrarna så att jag snabbt kan se att de är värden som skickas till skriptet, snarare än skapade i det. Jag använder prefixet ”the” för variabler som definieras i skriptet.

GIMPs konvention är att namnge dina skriptfunktioner `script-fu-abc`, för då visas de alla under Script-Fu då du listar funktionerna i procedurdatabasen. Detta hjälper också till att skilja dem från insticksmoduler.

#### 3.4.5. Registrera funktionen

Låt oss nu registrera funktionen med GIMP. Detta görs genom att anropa funktionen `script-fu-register`. När GIMP läser in ett skript kommer det exekvera denna funktion, vilken registrerar skriptet i procedurdatabasen. Du kan placera detta funktionsanrop var du vill i ditt skript, men jag placerar det vanligen i slutet, efter all min andra kod.

Här är listan för att registrera denna funktion (jag kommer förklara alla dess parametrar om ett ögonblick):

      (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")

Spara dessa funktioner i en textfil med filändelsen `.scm` i en underkatalog till din skriptkatalog, med samma namn som din skriptfil, och starta sedan om GIMP. Det nya skriptet kommer dyka upp som Filter → Tutorial → Text Box.

Om du anropar detta nya skript kommer det förstås inte göra något, men du kan se inmatningarna du skapade då du skriptet registrerades (mer information om vad vi gjorde kommer härnäst).

Om du slutligen anropar procedurbläddraren ( Hjälp → Procedurbläddrare) så kommer du se att vårt skript nu visas i databasen.

#### 3.4.6. Steg för att registrera skriptet

För att registrera vårt skript med GIMP anropar vi funktionen `script-fu-register`, fyller i de sju parametrarna som krävs och lägger till vårt skripts egna parametrar, tillsammans med en beskrivning och ett standardvärde för varje parameter.

Parametrarna som krävs

- Namnet på funktionen vi definierade. Detta är funktionen som anropas då vårt skript körs (inkörsporten till vårt skript). Detta är nödvändigt eftersom vi kan definiera flera funktioner i samma fil, och GIMP behöver veta vilken av dessa funktioner som ska anropas. I vårt exempel definierade vi bara en funktion, text-box, vilken vi registrerade.

- Menyetiketten är namnet som kommer visas i menyn. För att ange platsen, se Avsnitt 3.4.9, ”Registrera menyplatsen”.

- En beskrivning av ditt skript, att visas i procedurbläddraren.

- Ditt namn (skriptets författare).

- Copyright-information.

- Datumet som skriptet skapades, eller sista revisionen av skriptet.

- Typerna av bilder som skriptet fungerar på. Detta kan vara alla följande: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Eller så kan det inte vara någon alls i vårt fall skapar vi en bild, och behöver därmed inte definiera bildtyperna som vi arbetar på.

#### 3.4.7. Registrera skriptets parametrar

När vi har listat parametrarna som krävs så behöver vi lista parametrarna som motsvarar parametrarna som vårt skript behöver. När vi listar dessa parametrar ger vi antydningar om vad deras typer är. Detta är för dialogrutan som poppar upp när användaren väljer vårt skript. Vi tillhandahåller också ett standardvärde.

Detta avsnitt av registreringsprocessen har följande format:

Parametertyp | Beskrivning | Exempel
--- | --- | ---
`SF-IMAGE` | Om ditt skript arbetar på en öppen bild bör detta vara den första parametern efter parametrarna som krävs. GIMP kommer skicka in en referens till bilden i denna parameter. | 3
`SF-DRAWABLE` | Om ditt skript arbetar på en öppen bild bör detta vara den andra parametern efter `SF-IMAGE`-parametern. GIMP kommer skicka in en referens till det aktiva lagret i denna parameter. | 17
`SF-STRING` | Accepterar strängar. | "Någon text"
`SF-COLOR` | Indikerar att en färg begärs i denna parameter. | '(0 102 255)
`SF-TOGGLE` | En kryssruta visas för att få ett booleskt värde. | TRUE eller FALSE

#### 3.4.8. Parameter-API:t för Script-Fu[5]

| Notera
Förutom parametertyperna ovan finns det fler typer för det interaktiva läget, var och en av dem kommer skapa en komponent i kontrolldialogen. Du kommer hitta en lista över dessa parametrar med beskrivningar och exempel i testskriptet `plug-ins/script-fu/scripts/test-sphere-v3.scm` som kommer med källkoden för GIMP.

Parametertyp | Beskrivning
--- | ---
`SF-ADJUSTMENT` | Skapar en justeringskomponent i dialogrutan. SF-ADJUSTMENT "etikett" '(värde lägsta högsta stegökn sidökn siffror typ) Argumentlista för komponent
Element | Beskrivning
--- | ---
"etikett" | Text som skrivs före komponenten.
värde | Värde som används vid starten.
lägsta / högsta | De lägsta / högsta värdena (valintervall).
stegökn | Värde för ökning/minskning.
sidökn | Värde för ökning/minskning med page-tangenter.
siffror | Siffror efter decimal (decimaldel).
typ | En av: SF-SLIDER eller 0, SF-SPINNER eller 1
`SF-COLOR` | Skapar en färgknapp i dialogrutan. SF-COLOR "etikett" '(röd grön blå) eller SF-COLOR "etikett" "färg" Argumentlista för komponent
Element | Beskrivning
--- | ---
"etikett" | Text som skrivs före komponenten.
'(röd grön blå) | Lista med tre värden för röd, grön och blå komponent.
"färg" | Färgnamn i CSS-notation.
`SF-FONT` | Skapar en typsnittsvalkomponent i dialogrutan. Den returnerar ett typsnittsnamn som en sträng. Det finns två gimp-text-procedurer för att underlätta användningen av denna returparameter: (gimp-text-font image drawable x-pos y-pos text border antialias size font) (gimp-text-get-extents-font text size font) där font är typsnittsnamnet du får. Storleken som anges i typsnittsnamnet ignoreras tyst. Den används bara i typsnittsväljaren. Så du ombes att ställa in den till ett användbart värde (24 bildpunkter är ett bra val). SF-FONT "etikett" "typsnittsnamn" Argumentlista för komponent
Element | Beskrivning
--- | ---
"etikett" | Text som skrivs före komponenten.
"typsnittsnamn" | Namnet på standardtypsnittet.
`SF-BRUSH` | Det kommer skapa en komponent i kontrolldialogen. Komponenten består av ett förhandsvisningsområde (som när det trycks på kommer öppna en förhandsvisning) och en knapp med etiketten ”Bläddra...”. Knappen kommer poppa upp en dialogruta där penslar kan väljas och varje karakteristik för penseln kan modifieras. SF-BRUSH "Brush" '("Circle (03)" 100 44 0) Här kommer penseldialogen poppas upp med standardpenseln Circle (03) opacitet 100 mellanrum 44 och målningsläget Normal (värde 0). Om detta val inte ändrades skulle värdet som skickas till funktionen som en parameter vara '("Circle (03)" 100 44 0).
`SF-PATTERN` | Det kommer skapa en komponent i kontrolldialogen. Komponenten består av ett förhandsvisningsområde (som när det trycks på kommer öppna en förhandsvisning) och en knapp med etiketten ”Bläddra...”. Knappen kommer poppa upp en dialogruta där mönster kan väljas. SF-PATTERN "Pattern" "Maple Leaves" Värdet som returneras när skriptet körs är en sträng som innehåller mönsternamnet. Om valet ovan inte ändrades skulle strängen innehålla "Maple Leaves".
`SF-GRADIENT` | Det kommer skapa en komponent i kontrolldialogen. Komponenten består av en knapp som innehåller en förhandsvisning av den valda gradienten. Om knappen trycks ner kommer en gradientvalsdialog att visas. SF-GRADIENT "Gradient" "Deep Sea" Värdet som returneras då skriptet anropas är en sträng som innehåller gradientnamnet. Om valet ovan inte ändrades skulle strängen innehålla "Deep Sea".
`SF-PALETTE` | Det kommer skapa en komponent i kontrolldialogen. Komponenten består av en knapp som innehåller namnet på den valda paletten. Om knappen trycks ner kommer en palettvalsdialog att visas. SF-PALETTE "Palette" "Named Colors" Värdet som returneras när skriptet körs är en sträng som innehåller palettnamnet. Om valet ovan inte ändrades skulle strängen innehålla "Named Colors".
`SF-FILENAME` | Det kommer skapa en komponent i kontrolldialogen. Komponenten består av en knapp som innehåller namnet på en fil. Om knappen trycks ner kommer en filvalsdialog att visas. SF-FILENAME "etikett" (string-append "" gimp-data-directory "/scripts/beavis.jpg") Värdet som returneras då skriptet anropas är en sträng som innehåller filnamnet.
`SF-DIRNAME` | Endast användbart i interaktivt läge. Mycket lik SF-FILENAME, men den skapade komponenten möjliggör val av en katalog i stället för en fil. SF-DIRNAME "etikett" "/var/tmp/images" Värdet som returneras då skriptet anropas är en sträng som innehåller katalognamnet.
`SF-OPTION` | Det kommer skapa en komponent i kontrolldialogen. Komponenten är en kombinationsruta som visar de alternativ som skickas som en lista. Det första alternativet är standardvalet. SF-OPTION "etikett" '("alternativ1" "alternativ2") Värdet som returneras när skriptet körs är numret för det valda alternativet, där det första alternativet räknas som 0.
`SF-ENUM` | Det kommer skapa en komponent i kontrolldialogen. Komponenten är en kombinationsruta som visar alla enum-värden för den angivna enum-typen. Detta måste vara namnet på en registrerad enum, utan prefixet "Gimp". Den andra parametern anger standardvärdet, med enum-värdets alias. SF-ENUM "Interpolation" '("InterpolationType" "linear") Värdet som returneras då skriptet anropas motsvarar valt enum-värde.

#### 3.4.9. Registrera menyplatsen

När vi har registrerat vårt skript behöver vi säga till GIMP var det ska hittas i menyn.

Den bästa menyplatsen för ditt skript beror på dess funktion. De flesta skript hittas i menyerna Filter och Färger.

För det aktuella skriptet, som skapar en ny bild, väljer vi en undermeny Filters → Tutorial. Detta är vad raden med funktionen `script-fu-menu-register` gör. Vi registrerade därmed vår Text Box här: Filter → Tutorial → Text Box (Menykatalogen Filters är översatt i GIMP-gränssnittet och visas på aktuellt språk).

Alla undermenyer som du anger i ditt skript som inte ännu finns kommer skapas automatiskt av GIMP.

[5] Detta avsnitt är inte en del av den ursprungliga handledningen.

3.3. Listor, listor och åter listor |  | 3.5. Lägga till ytterligare funktionalitet

Report a bug in GIMP Rapportera ett dokumentationsfel