3.4. Votre premier script de Script-Fu
| 3. Didacticiel pour Script-Fu |

### 3.4. Votre premier script de Script-Fu

Vous tirez la langue, non ? Allez, entamons notre quatrième leçon : votre premier script de Script-Fu !

#### 3.4.1. Création d'un Script Boîte de Texte

L'une des opérations les plus fréquentes que je réalise avec GIMP, est la création d'une boîte contenant un texte pour une page Web ou un logo. Mais vous ne savez jamais bien quel taille donner à l'image au départ. Vous ne savez pas combien d'espace le texte occupera avec la taille de police que vous voulez.

Le Maître en Script-Fu (et l'étudiant), se rend compte rapidement que ce problème peut être aisément résolu et automatisé avec un Script-Fu.

Nous allons donc créer un script, appelé Text Box, qui crée une image dont la taille est parfaitement adaptée au texte que saisit l'utilisateur. Nous permettront aussi à l'utilisateur de choisir la police de caractères, sa taille, et la couleur du texte.

#### 3.4.2. Éditer et enregistrer vos Scripts

Jusqu'à présent, nous avons travaillé avec la Console de Script-Fu. Mais nous allons maintenant à l'édition de fichiers textes de script.

Là où vous stockez vos scripts est affaire de préférence -- si vous avez accès au répertoire de scripts par défaut de GIMP, vous pouvez y placer vos scripts. Néanmoins, je préfère avoir mes scripts dans mon propre répertoire de scripts, bien séparés des scripts installés par GIMP au départ.

Dans le répertoire `.gimp-2.2` que GIMP a créé dans votre répertoire personnel, vous devriez trouver un répertoire nommé `scripts`. GIMP recherchera systématiquement un répertoire pour les scripts dans votre répertoire `.gimp-2.2`, et ajoutera les scripts de ce répertoire dans la base des Script-Fu. C'est donc là que vous devriez placer vos scripts personnels.

#### 3.4.3. Le strict nécessaire

Tout script de Script-Fu définit au moins une fonction, qui est la fonction principale du script. C'est là que vous travaillerez.

Tout script doit également être connu de la base de données de procédures (PDB), de façon à ce que GIMP puisse y accéder.

Nous allons définir la fonction principale en premier :

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

Nous definissons ici une fonction appelée script-fu-text-box avec quatre paramètres qui correspondront plus tard à un texte, une police, la taille de la police et la couleur du texte. La fonction est actuellement vide et ne fait rien. Jusqu'ici ça va -- rien de neuf, rien de spécial.

#### 3.4.4. Conventions de dénomination

Les conventions de dénomination de Scheme préfèrent les lettres minuscules avec traits d'union, ce que j'ai respecté dans la dénomination de la fonction. Toutefois, je me suis écarté de la convention en ce qui concerne les paramètres. Je préfère en effet les noms descriptifs pour mes paramètres et variables, c'est pourquoi j'ai ajouté le préfixe « in » aux paramètres, de façon à voir d'emblée qu'il s'agit de paramètres reçus par la fonction et non pas de paramètres émis par elle. Et j'utilise le prefixe « the » pour les variables définies au sein du script.

C'est une convention GIMP de nommer vos fonctions de script script-fu-..., parce qu'ainsi elle apparaîtront avec les script-fu quand elles seront listées dans la base de procédures. Cela permet aussi de les distinguer des greffons.

#### 3.4.5. Enregistrement de la fonction

Maintenant, faisons connaître la fonction à GIMP. On réalise cela en appelant la fonction `script-fu-register`. Quand GIMP lira le script, il exécutera cette fonction qui enregistrera le script dans la base de procédures. Vous pouvez placer cette fonction où vous voulez dans votre script, mais personnellement je la mets à la fin, après tout le reste de mon code.

Voici le listing pour enregistrer cette fonction (j'expliquerai ses paramètres dans un instant) :

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

Enregistrez ces fonctions dans un fichier texte avec le suffixe `.scm` dans votre répertoire de scripts, et choisissez Exts → Script-Fu → Rafraîchir les Scripts, et ce nouveau script apparaîtra comme Xtns → Script-Fu → Text → Text Box.

Si vous lancez ce nouveau script, il ne fera rien bien sûr, mais vous pourrez voir les invites que vous avez créées quand vous avez enregistré le script (ça sera plus clair plus loin).

Finalement,si vous invoquez le Navigateur de Procédures : Exts → Navigateur de Procédures), vous verrez que votre script apparaît maintenant dans la base de procédures.

#### 3.4.6. Étapes pour enregistrer le script

Pour enregistrer notre script dans GIMP, nous appelons la fonction script-fu-register, remplissons les sept paramètres requis et nous ajoutons nos propres paramètres de script, ainsi qu'une description et une valeur par défaut pour chaque paramètre.

Les paramètres requis

- Le nom de la fonction que nous avons défini. C'est la fonction appelée quand notre script est invoqué, le point d'entrée dans notre script. C'est important parce que nous pourrons definir plusieurs autres fonctions dans le même fichier, et GIMP doit savoir quelle fonction appeler. Dans notre exemple, nous n'avons défini qu'une seule fonction, text-box, que nous avons enregistrée.

- L'emplacement dans le menu où le script est inséré est spécifié comme un chemin dans Unix, avec la racine du chemin qui est soit la boîte à outils, soit le clic droit.

  Si votre script n'opère pas sur une image existante (et donc crée une nouvelle image, comme le fera notre script Text Box, vous voudrez l'insérer dans la fenêtre principale de GIMP (celle où se trouvent tous les outils).

  Si votre script est destiné à opérer sur une image présente à l'écran, vous voudrez l'insérer dans le menu d'image qui apparaît quand vous faites un clic droit sur une image. Le reste du chemin pointe sur les listes de menus, les menus et les sous-menus. Ainsi, nous avons enregistré notre script Text Box dans le menu Texte du menu Scrip-Fu du menu Exts de la Boîte à outils. Exts → Script-Fu → Texte → Text Box ).

  Si vous avez remarqué, le sous-menu Texte dans le menu Script-Fu n'existait pas au départ : GIMP crée automatiquement les menus qui n'existent pas déjà.

- Une description de votre script, qui sera affichée dans le Navigateur de Procédures.

- Votre nom (l'auteur du script)

- Information de Copyright.

- La date à laquelle le script a été créé, ou la date de dernière révision.

- Les types d'image sur lesquels travaille le script. Il peut s'agir de RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Ou aucun d'eux: dans notre cas, nous créons une image et nous n'avons pas besoin d'en définir le type.

#### 3.4.7. Enregistrement des paramètres du script

Maintenant que nous avons vu la liste des paramètres requis, nous devons préciser ceux qui correspondent aux besoins de notre script. Nous devons fournir des précisions concernant leur type, pour la fenêtre de dialogue qui apparaît quand l'utilisateur choisit notre script. Nous devons aussi fournir une valeur par défaut.

Cette section du processus d'enregistrement a le format suivant :

Type de paramètre | Description | Exemple
--- | --- | ---
SF-VALUE | Accepte les nombres et les chaînes de caractères. (NDT- pas clair : "note that quotes must be escaped for default text, so better use SF-STRING"). | 42
SF-STRING | Accepte les chaînes de caractères. | "Un texte"
SF-COLOR | Indique qu'une couleur est nécessaire pour ce paramètre. | '(0 102 255)
SF-TOGGLE | Une boîte de saisie est affichée, pour entrer une valeur Booléenne. | TRUE ou FALSE (Vrai ou Faux)
SF-IMAGE | Si votre script opère sur une image ouverte, ceci doit être le premier paramètre après les paramètres requis. GIMP transmettra une référence à l'image dans ce paramètre. | 3
SF-DRAWABLE | Si votre script opère sur une image ouverte, ceci doit être le second paramètre, après le paramètre SF-IMAGE. Il se réfère au calque actif. GIMP transmettra une référence au calque actif dans ce paramètre. | 17

3.3. Listes, des listes et encore des listes |  | 3.5. Donner un peu plus de corps à votre script