3.4. Il primo script Script-Fu
| 3. Una guida su Script-Fu |

### 3.4. Il primo script Script-Fu

Procediamo con la quarta lezione, il primo script Script-Fu.

#### 3.4.1. Creare uno script Text Box

Una delle operazioni più comuni che si intraprendono in GIMP è la creazione di un rettangolo con del testo per una pagina web, un logo o altro. Tuttavia quando si comincia non si sa quanto far grande l'immagine iniziale. Non si sa quanto spazio occuperà il testo con il font e la dimensione del font che si vuole.

Il maestro di Script-Fu (e lo studente) si accorgeranno subito che questo problema può facilmente essere risolto e automatizzato con Script-Fu.

Si creerà quindi uno script, intitolato Text Box, che crea un'immagine delle dimensioni corrette per contenere una linea di testo immessa dall'utente. Si consentirà inoltre all'utente di scegliere il font, la dimensione del font e il colore del testo.

#### 3.4.2. Modificare e memorizzare gli script

Fino ad ora si è lavorato nella finestra della console Script-Fu. Adesso si comincerà a modificare file testuali per gli script.

Dove tenere i propri script è una questione di preferenze personali -- se si ha accesso alla directory predefinita degli script di GIMP si possono tenere lì gli script. Tuttavia è preferibile mantenere i propri script in una propria directory personale per tenerli separati dagli script creati dall'installazione.

Nella directory `.gimp-2.4` che GIMP crea nella directory home dell'utente si dovrebbe trovare una directory denominata `scripts`. GIMP controllerà automaticamente nella directory `.gimp-2.4` se esiste una directory scripts e aggiungerà gli scripts contenuti in questa directory al database di Script-Fu. Si dovrebbero memorizzare i propri script personali in questa directory.

#### 3.4.3. Lo stretto necessario

Ogni script Script-Fu definisce almeno una funzione che è la funzione principale dello script. Questa è la funzione dove si fa il lavoro.

Ogni script deve registrarsi nel database delle procedure per poter risultare accessibile a GIMP.

Si definisca dapprima la funzione principale:

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

Qui si definisce una nuova funzione denominata script-fu-text-box che riceve quattro parametri che poi corrisponderanno a del testo, ad un font, alla dimensione del font e al colore del testo. La funzione è al momento vuota e non fa nulla.

#### 3.4.4. Convenzioni per i nomi

Le convenzioni sui nomi di Scheme sembrano dare la preferenza a lettere minuscole con trattini, convenzione seguita nel dare il nome alla funzione. Tuttavia ci si è allontanati dalla convenzione con gli argomenti. Si sono preferiti nomi più descrittivi per argomenti e variabili e quindi si è aggiunto il prefisso "in" agli argomenti in modo da distinguerli rapidamente come argomenti passati allo script piuttosto che creati al suo interno. Si è usato il prefisso "the" per variabili definite all'interno dello script.

Fa parte della convensione di GIMP di denominare le funzioni degli script script-fu-abc, poichè quando vengono elencate nel database delle procedure sono tutte raggruppate sotto il prefisso script-fu. Ciò aiuta anche a distinguerle dai plug-in.

#### 3.4.5. Registrare la funzione

Si registri ora la funzione in GIMP. Ciò si ottiene richiamando la funzione `script-fu-register`. Quando GIMP legge uno script eseguirà questa funzione che registra lo script nel database delle procedure. Si può posizionare questa funzione in ogni parte dello script ma di solito la si posiziona alla fine dopo tutto il codice.

Ecco il listato per registrare questa funzione (si chiariranno a breve gli argomenti):

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

Se si salva questa funzione in un file di testo con estensione `.scm` all'interno della directory degli script, quindi si seleziona Xtns → Script-Fu → Rinfresca gli scripts, questo nuovo script comparirà come Xtns → Script-Fu → Text → Text Box.

Se si invoca questo nuovo script naturalmente non succede nulla, ma si possono osservare le richieste di parametri definite quando si registra lo script (ulteriori informazioni più avanti).

Infine se si richiama il Navigatore delle procedure ( Xtns → Navigatore delle procedure), si noterà che lo script compare ora nel database.

#### 3.4.6. Passi per la registrazione dello script

Per registrare lo script in GIMP si richiama la funzione script-fu-register, passando i sette parametri richiesti e aggiungendo gli argomenti dello script insieme con una descrizione e un valore predefinito per ciascun argomento.

Gli argomenti richiesti

- Il nome della funzione definita. Questa è la funzione richiamata quando si invoca lo script (il punto di entrata). E' obbligatoria perchè si possono definire altre funzioni all'interno dello stesso file e GIMP deve sapere quale tra queste funzioni richiamare. Nell'esempio si è definita solo una funzione, text-box, che è stata registrata.

- La collocazione nel menu dove lo script sarà inserito. L'esatta collocazione è specificata come un percorso di file Unix, con «<Toolbox>» o «<Image>» come radice.

  Se lo script non opera su immagini preesistenti (e quindi ne crea di nuove come lo script Text Box), è preferibile inserirlo nel menu della casella strumenti -- questo è il menu nella finestra principale di GIMP (dove sono posizionati tutti gli strumenti: quelli di selezione, la lente di ingrandimento, ecc.).

  Se lo script lavora su una immagine in corso di modifica è preferibile inserirlo nel menu che compare quando si fa clic col tasto destro su un'immagine aperta. La parte restante del percorso indica la voce del menu e dei submenu. Quindi si registri lo script Text Box script nel sottomenu Text del sottomenu Script-Fu del menu Xtns della casella strumenti ( Xtns → Script-Fu → Text → Text Box ).

  Si noti che il sottomenu Text non è presente all'inizio -- GIMP crea automaticamente i menu inesistenti.

- Una descrizione dello script che viene visualizzata nel Navigatore delle procedure.

- Un nome autore (l'autore dello script).

- Informazioni sul Copyright.

- La data di creazione dello script o quella della sua ultima revisione.

- I tipi di immagine su cui lo script opera. Questo argomento può essere uno tra: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Può anche essere non presente nel caso si crei una nuova immagine e quindi non risulti applicabile.

#### 3.4.7. Registrare i parametri dello script

Dopo aver elencato gli argomenti necessari occorre elencare gli argomenti che corrispondono a quelli necessari al nostro script. Quando si elencano questi argomenti si danno indicazioni sui loro tipi, questo serve per la finestra di dialogo che compare quando l'utente seleziona lo script. Si deve anche fornire un valore predefinito.

Questa sezione del processo di registrazione ha il seguente formato:

Tipo argomento | Descrizione | Esempio
--- | --- | ---
SF-IMAGE | Se lo script opera su un'immagine già aperta questo dovrebbe essere il primo argomento dopo quelli necessari, GIMP passa un riferimento all'immagine in questo argomento. | 3
SF-DRAWABLE | Se lo script opera su un'immagine aperta questo dovrebbe essere il secondo argomento dopo SF-IMAGE. Si riferisce al livello attivo. GIMP passa un riferimento al livello attivo in questo argomento. | 17
SF-VALUE | Accetta numeri e stringhe. Si noti che le virgolette devono essere sottoposte ad escape in caso di stringhe di testo, è preferibile utilizzare SF-STRING. | 42
SF-STRING | Accetta stringhe. | "Del testo"
SF-COLOR | Indica che questo argomento richiede un colore. | '(0 102 255)
SF-TOGGLE | Viene mostrata una casella di scelta per richiedere un valore booleano. | TRUE o FALSE (vero o falso)

3.3. Liste, liste e ancora liste |  | 3.5. Dare un corpo allo script