3.4. Su primer código de Script-Fu
| 3. Un tutorial de Script-Fu |

### 3.4. Su primer código de 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. Crear un script: una caja de texto

Una de las operaciones más comunes que realiza el autor en GIMP es crear una caja con algún texto en ella para una página web, un logotipo o algo así. Nunca se sabe el tamaño adecuado de una imagen cuando se empieza. No sabe cuánto espacio llenará el texto con la tipografía ni el tamaño de tipografía que quiere.

This problem can be solved and automated with Script-Fu.

Crearemos un script, llamado «Text Box», que creará una imagen, con el tamaño correctamente ajustado a una línea de texto, que el usuario introduce. También, dejaremos al usuario elegir la fuente, el tamaño de la fuente y el color del texto.

#### 3.4.2. Editar y guardar su código

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. Lo esencial al descubierto

Cada guión Script-Fu define al menos una función, que es la función principal del script. Es donde hace el trabajo.

Cada script debe registrarse también en la base de datos de procedimientos, para poder acceder a el bajo GIMP.

Se define la función principal, primero:

            (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. Convenciones de nombres

Las convenciones de nombres en Scheme parecen preferir minúsculas con guiones y se han seguido en el nombre de la función. Sin embargo, se parte de la convención con los parámetros. Se quieren nombres más descriptivos para los parámetros y variables, y se añade el prefijo «in» a los parámetros, así se puede ver rápidamente qué valores entran en el script, en lugar de que los que se crean en él. Se usa el prefijo «the» para las variables definidas en el script.

Es la convención de GIMP para nombrar sus funciones de script `script-fu-abc`, porque así están listadas en la base de datos de procedimientos, todas ellas se mostrarán bajo Script-Fu cuando se estén listando las funciones. Esto también ayuda a distinguirlas de los complementos.

#### 3.4.5. Registrar la función

Ahora se registra la función con GIMP. Esto se hace llamando a la función `script-fu-register`. Cuando GIMP lee en un script, ejecutará esta función, que registrará el script en la base de datos de procedimientos. Puede situar esta llamada a la función donde quiera en su script, pero normalmente se sitúa al final, después de las otras líneas de código.

Aquí está el listado de registro de esta función (se explicarán todos estos parámetros enseguida):

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

Save these functions in a text file with a `.scm` suffix in a subdirectory of your script directory, with the same name as your script file, then restart GIMP. The new script will appear as Filters → Tutorial → Text Box.

Si llama a este nuevo script, no hará nada, desde luego, pero puede ver los apuntes creados cuando se registra el script (más información de lo que hicimos, se descubrirá luego).

Finalmente, si abre el visor de procedimientos Ayuda → Visor de procedimientos), verá que nuestro script aparece en la base de datos.

#### 3.4.6. Pasos para registrar el script

Para registrar el script en GIMP, se llamará a la función `script-fu-register`, se rellenarán los siete parámetros requeridos y se añadirán los parámetros propios, junto con una descripción y los valores predefinidos para cada parámetro.

Los parámetros requeridos

- El nombre de la función que se define. Esto es la llamada de la función cuando nuestro script se invoca (el punto de entrada del script). Es necesario porque se pueden definir funciones adicionales bajo el mismo archivo, y GIMP necesita saber a cuáles de estas funciones se llama. En este ejemplo, solo se define una función, «text box», que se ha registrado.

- The menu label is the name that will be shown in the menu. To specify the location, see Sección 3.4.9, “Registering the Menu Location”.

- Una descripción de su script, para ser mostrada en el visor de procedimientos.

- Su nombre (el autor del script).

- Información de los derechos de autor.

- La fecha en que se hizo el script, o la última revisión del mismo.

- 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. Registrar los parámetros del script

Una vez que se han listado los parámetros requeridos, se necesitan listar los parámetros que corresponden a los parámetros que su script necesita. Al listar estos parámetros, se dan indicaciones del tipo que son. Esto es por el diálogo que aparece cuando el usuario selecciona el script. También se pueden proporcionar valores predefinidos.

Esta sección del proceso de registro tiene el siguiente formato:

Tipo de parámetro | Descripción | Ejemplo
--- | --- | ---
`SF-IMAGE` | Si su script opera en una imagen nueva, esta debería ser el primer parámetro después de los parámetros requeridos. GIMP pasará una referencia a la imagen en este parámetro. | 3
`SF-DRAWABLE` | Si su script opera sobre una imagen abierta, este sería el segundo parámetro después de el parámetro `SF-IMAGE`. Se refiere a la capa activa. GIMP pasará una referencia a la capa activa en este parámetro. | 17
`SF-STRING` | Acepta cadenas. | «Un texto»
`SF-COLOR` | Indica que color se requiere en este parámetro. | '(0 102 255)
`SF-TOGGLE` | Se muestra una caja, para obtener un valor Booleano. | TRUE o FALSE

#### 3.4.8. Los parámetros API de Script-Fu[5]

| Nota
Beside the above parameter types there are more types for the interactive mode, each of them will create a widget in the control dialog. You will find a list of these parameters with descriptions and examples in the test script `plug-ins/script-fu/scripts/test-sphere-v3.scm` shipped with the GIMP source code.

Tipo de parámetro | Descripción
--- | ---
`SF-ADJUSTMENT` | Crea un widget de ajuste en el diálogo. SF-ADJUSTMENT "etiqueta" '(valuer inferior superior incremento_del_paso incremento_tecla_página dígitos tipo) Lista de argumentos del widget
Elemento | Descripción
--- | ---
"etiqueta" | Texto impreso antes del widget.
valor | Valor impreso al principio.
inferior / superior | Los valores inferior / superior (rango de elección)
incremento_del_paso | Incrementar/reducir el valor.
incremento_tecla_página | Incrementar/reducir el valor usando la tecla página.
dígitos | Dígitos después del punto (parte decimal).
«type» | Uno de: SF-SLIDER o 0, SF-SPINNER o 1
`SF-COLOR` | Crea un botón de color en el diálogo. SF-COLOR "etiqueta" '(red green blue) o SF-COLOR "etiqueta" "color" Lista de argumentos del widget
Elemento | Descripción
--- | ---
"etiqueta" | Texto impreso antes del widget.
'(red green blue) | Lista de los tres valores para los componentes rojo, verde y azul.
"color" | Nombre del color en notación CSS.
`SF-FONT` | Crea un widget para la selección de la tipografía en el diálogo. Devuelve un nombre de tipografía en una cadena. Hay dos procedimientos nuevos de «gimp-text» para facilitar el uso de este parámetro de retorno: (gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font) (gimp-text-get-extents-fontname text size unit font) en donde «font» es el nombre de la tipografía que obtiene. El tamaño especificado en nombre de la tipografía se ignora silenciosamente. Sólo se usa en el selector de la tipografía. Se le pregunta para que lo ajuste a un valor útil (24 píxeles es una buena elección). SF-FONT "etiqueta" "nombre de la tipografía" Lista de argumentos del widget
Elemento | Descripción
--- | ---
"etiqueta" | Texto impreso antes del widget.
"nombre de la tipografía" | Nombre de la tipografía predeterminada.
`SF-BRUSH` | Creará un widget en el diálogo de control. El widget consiste en un área de vista previa (que cuando se presiona produce una vista previa emergente) y un botón con la etiqueta «...». El botón abre un diálogo donde se pueden seleccionar los pinceles y modificar cada una de las características del pincel. SF-BRUSH "Brush" '("Círculo (03)" 100 44 0) Aquí el diálogo de pincel se abrirá con el pincel predeterminado «Círculo (03)», opacidad 100, espaciado 44 y el modo de pintura en normal (valor 0). Si se cambió esta selección el valor pasado a la función como parámetro será '("Círculo (03)" 100 44 0).
`SF-PATTERN` | Creará un widget en el diálogo de control. El widget consiste en un área de vista previa (que cuando se presiona produce una vista previa emergente) y un botón con la etiqueta «...». El botón abre un diálogo donde se pueden seleccionar los patrones. SF-PATTERN "Pattern" "Hojas de arce" El valor devuelto cuando se llama al script es una cadena que contiene el nombre del patrón. Si la selección anterior no se ha cambiado la cadena contendrá «Hojas de arce».
`SF-GRADIENT` | Creará un widget en el diálogo de control. El widget consiste en un botón que contiene una vista previa del degradado seleccionado. Si se presiona el botón se abre un diálogo de selección de degradado. SF-GRADIENT "Gradient" "Azul profundo" El valor devuelto cuando se llama al script es una cadena que contiene el nombre del patrón. Si la selección anterior no se ha cambiado la cadena contendrá «Azul profundo».
`SF-PALETTE` | Creará un widget en el diálogo de control. El widget consiste en un botón que contiene el nombre de la paleta seleccionada. Si se presiona el botón se abre un diálogo de selección de paleta. SF-PALETTE "Palette" "Colores con nombre" El valor devuelto cuando se llama al script es una cadena que contiene el nombre del patrón. Si la selección anterior no se ha cambiado la cadena contendrá «Colores con nombre».
`SF-FILENAME` | Creará un widget en el diálogo de control. El widget consiste en un botón que contiene el nombre de un archivo. Si se presiona el botón se abre un diálogo de selección de archivo. SF-FILENAME "etiqueta" (string-append "" gimp-data-directory "/scripts/beavis.jpg") El valor devuelto cuando se llama al script es una cadena que contiene el nombre del archivo.
`SF-DIRNAME` | Sólo es útil en modo interactivo. Muy parecido a SF-FILENAME, pero el widget creado permite elegir una carpeta en lugar de un archivo. SF-DIRNAME "etiqueta" "/var/tmp/images" El valor devuelto cuando se llama al script es una cadena que contiene el nombre de la carpeta.
`SF-OPTION` | Creará un widget en el diálogo de control. El widget es una caja combinada que muestra las opciones pasadas como una lista. La primera opción es la predeterminada. SF-OPTION "etiqueta" '("opción1" "opción2") El valor devuelto cuando se llama al script es el número de la opción elegida, en donde la primera opción se cuenta como 0.
`SF-ENUM` | Creará un widget en el diálogo de control. El widget es una caja combinada que muestra todos los valores enumerados para el tipo de enumeración dado . Tiene que ser el nombre de un enumerado registrado, sin el prefijo «Gimp». El segundo parámetro especifica el valor predeterminado, usando el nombre corto del valor de enumeración. SF-ENUM "Interpolación" '("InterpolationType" "lineal") El valor devuelto cuando se llama al script corresponde al valor enumerado elegido.

#### 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 Filters → Tutorial. This is what the line with the `script-fu-menu-register` function does. Thus, we registered our Text Box script here: Filters → Tutorial → Text Box.

Any submenu that you specify in your script that doesn't exist yet will be automatically created by GIMP.

[5] Esta sección no es parte del tutorial original.

3.3. Listas, listas y más listas |  | 3.5. Adding Additional Functionality

Report a bug in GIMP Report a documentation error