Los requisitos mínimos de una acción COMMAND son dos campos: ACTION y EXEC_STRING.
ACTION nombre_acción { EXEC_STRING cadena_ejecución }
La cadena de ejecución es la parte más importante de una definición de acción COMMAND. Utiliza una sintaxis similar a la de la línea de comandos que se ejecutaría en una ventana Terminal, pero incluye sintaxis adicional para manejar argumentos de archivo y de cadena.
Las cadenas de ejecución pueden incluir:
Argumentos de archivo o de otros tipos
Sintaxis de shell
Rutas absolutas o nombres de archivos ejecutables
Un argumento es la información que un comando o aplicación necesita para ejecutarse correctamente. Por ejemplo, examinemos la línea de comandos que se podría utilizar para abrir un archivo en el Editor de textos:
dtpad nombre_archivo
En este comando, nombre_archivo es un argumento de archivo del comando dtpad.
Las acciones, al igual que las aplicaciones y los comandos, pueden tener argumentos. Una acción COMMAND puede utilizar dos tipos de datos:
Archivos
Datos de cadena
La cadena de ejecución se ejecuta directamente, en lugar de hacerlo a través de un shell. Sin embargo, se puede invocar un shell de forma explícita en la cadena de ejecución.
Por ejemplo:
EXEC_STRING \ /bin/sh -c \ 'tar -tvf %(File)Arg_1% 2>&1 | \${PAGER:-more};\ echo "\\n*** Seleccione Cerrar en el menú Ventana para cerrarla ***"'
Si su aplicación está ubicada en un directorio que aparece listado en la variable PATH, puede utilizar el nombre simple del ejecutable. Si la aplicación está en otro lugar, deberá utilizar la ruta absoluta al archivo ejecutable.
Utilice para EXEC_STRING la misma sintaxis que usaría para iniciar la aplicación desde una línea de comandos.
Esta cadena de ejecución es parte de una acción que inicia el cliente X xcutsel.
EXEC_STRING xcutsel
Esta cadena de ejecución inicia el cliente xclock con un reloj digital. La línea de comandos incluye una opción de línea de comandos, pero no necesita ningún argumento
EXEC_STRING xclock -digital
Utilice esta sintaxis para el argumento de archivo:
%Arg_n%
o
%(File)Arg_n%
(File) es opcional, pues se supone que, de manera predeterminada, los argumentos proporcionados a Arg_n son archivos. (Véase Interpretación de un argumento de archivo como si fuera una cadena para conocer el uso de la sintaxis %(String)Arg_n%.)
Esta sintaxis permite al usuario soltar un objeto archivo de datos sobre el icono de la acción, para iniciar ésta con un argumento de archivo. Sustituye el argumento n de la línea de comandos. El archivo puede ser local o remoto.
Esta cadena de ejecución ejecuta wc -o mediante un archivo soltado como parámetro -carga .
EXEC_STRING wc -w %Arg_1%
Este ejemplo muestra un fragmento de una definición que sólo funciona con argumentos de directorio. Cuando se suelta un directorio sobre el icono de acción, ésta muestra una lista de todos los archivos del directorio que tienen permiso de lectura-escritura.
ACTION Lista_Archivos_Escribibles { ARG_TYPE FOLDER EXEC_STRING /bin/sh -c 's -l %Arg_1% | grep rw-' … }
Utilice esta sintaxis para el argumento de archivo:
%(File)"solicitud"%
Esta sintaxis crea una acción que muestra una solicitud de nombre de archivo cuando el usuario pulsa dos veces el icono de acción.
Por ejemplo, esta cadena de ejecución muestra un cuadro de diálogo que solicita el argumento de archivo del comando wc -o comando:
EXEC_STRING wc -w %(File)"Contar palabras en archivo:"%
Utilice esta sintaxis para el argumento de archivo:
%Arg_n"solicitud"%
o
%(File)Arg_n"solicitud"%
Esta sintaxis produce una acción que:
Acepta un archivo soltado como argumento de archivo.
Muestra un cuadro de diálogo que solicita un nombre de archivo cuando el usuario pulsa dos veces el icono de acción.
Por ejemplo, esta cadena de ejecución ejecuta lp -oraw en un archivo soltado. Si se inicia la acción haciendo doble clic en el icono, aparece un cuadro de diálogo que solicita el nombre de archivo.
EXEC_STRING lp -oraw %Arg_1"Archivo a imprimir:"%
Utilice esta sintaxis para el parámetro no de archivo:
%"solicitud"%
o
%(String)"solicitud"%
(String) es opcional, dado que el texto entre comillas se interpreta, de manera predeterminada, como datos de tipo cadena. Esta sintaxis muestra un cuadro de diálogo que solicita datos que no sean archivos; no la utilice para solicitar un nombre de archivo.
Por ejemplo, esta cadena de ejecución ejecuta el comando xwd y solicita un valor para sumar a cada píxel:
EXEC_STRING xwd -add %"Sumar valor:"% -out %Arg_1"Nombre de archivo:"%
Utilice esta sintaxis para el argumento:
%(String)Arg_n%
Por ejemplo, esta cadena de ejecución imprime un archivo con una carátula que contiene el nombre de archivo, mediante el comando lp -rcarátula nombre_archivo.
EXEC_STRING lp -t%(String)Arg_1% %(File)Arg_1"Archivo a imprimir:"%
Especifique el shell en la cadena de ejecución:
/bin/sh -c 'comando' /bin/ksh -c 'comando' /bin/csh -c 'comando'
Esta cadena de ejecución ilustra una acción que utiliza reconducción de shell.
EXEC_STRING /bin/sh -c 'ps | lp'
Cadena de ejecución más compleja que requiere el proceso de shell y acepta un argumento de archivo.
EXEC_STRING /bin/sh -c 'tbl %Arg_1"Página de comando man:"% | troff -man'
Cadena de ejecución que requiere que el argumento sea un archivo comprimido. La acción descomprime el archivo y lo imprime mediante lp -oraw.
EXEC_STRING /bin/sh -c 'cat %Arg_1 "Archivo a imprimir:"% | \ uncompress | lp -oraw'
Hay tres procedimientos para que las acciones manejen múltiples argumentos de archivo:
La acción se puede ejecutar de forma repetida, una vez para cada argumento. Cuando EXEC_STRING contiene un único argumento de archivo y se proporcionan múltiples argumentos de archivo soltando varios archivos sobre el icono de acción, la acción se ejecuta por separado para cada uno de los argumentos.
Por ejemplo, si se proporcionan múltiples argumentos de archivo a la siguiente definición de acción:
ACTION MostrarImagenPantalla { EXEC_STRING xwud -in %Arg_1% … }
la acción MostrarImagenPantalla se ejecuta repetidamente.
La acción puede utilizar dos o más argumentos de archivo no intercambiables. Por ejemplo:
xsetroot -cursor archivo_cursor archivo_máscara
requiere dos archivos únicos en un orden determinado.
La acción puede realizar el mismo comando de forma secuencial en cada argumento de archivo. Por ejemplo:
pr archivo [archivo …]
imprimirá uno o varios archivos en un único trabajo de impresión.
Utilice uno de los siguientes convenios de sintaxis:
Si desea que la acción solicite los nombres de archivo, utilice esta sintaxis para cada argumento de archivo:
%(File)"solicitud"%
Utilice una cadena solicitud distinta para cada argumento.
Por ejemplo, esta cadena de ejecución solicita dos archivos.
EXEC_STRING xsetroot -cursor %(File)"Mapa de bits de cursor:"% \ %(File)"Mapa de bits de máscara:"%
Para aceptar archivos soltados, utilice esta sintaxis para cada argumento de archivo:
%Arg_n%
mediante diferentes valores de n para cada argumento. Por ejemplo:
EXEC_STRING diff %Arg_1% %Arg_2%
Utilice uno de los siguientes convenios de sintaxis:
Para crear una acción que acepte archivos soltados y ejecute un comando en la forma comando archivo 1 archivo 2 …, utilice esta sintaxis para los argumentos de archivo:
%Args%
Para crear una acción que acepte varios archivos soltados o muestre una solicitud de un único archivo cuando se hace doble clic, utilice esta sintaxis para los argumentos de archivo:
%Arg_1"solicitud"% %Args%
La acción iniciará el comando con el formato: comando archivo 1 archivo 2 ….
Esta cadena de ejecución crea una acción que ejecuta:
pr archivo 1 archivo 2
con múltiples argumentos de archivo.
EXEC_STRING pr %Args%
Esta cadena de ejecución crea una acción similar a la del ejemplo anterior, salvo que la acción muestra una solicitud al hacer doble clic en ella (sin argumentos de archivo).
EXEC_STRING pr %Arg_1"Archivo(s) a imprimir:"% %Args%
Para aceptar múltiples argumentos de archivo soltados y ejecutar una línea de comandos con el formato:
comando archivo 1 archivo 2 …
utilice la sintaxis:
%Args%
Esta cadena de ejecución ejecuta una secuencia llamada Comprobar para múltiples archivos:
EXEC_STRING /usr/local/bin/Checkout \ %Arg_1"¿Qué archivo desea comprobar?"% %Args%