# Especiales y variables globales internas

Los especiales son funciones que &kommander; procesa. Debería tener en cuenta que, hasta que &kommander; tenga un analizador completo, todos los especiales de &kommander; se ejecutarán antes que el guión. En la mayoría de casos no suele ser un problema, pero en algunos sí.

`@dcop(`appId`, `objeto`, `función`, `argumentos`)`

- Hace una llamada &DCOP;. @dcop(kmail, KMailIface, checkMail(), )

`@dcopid`

- El id. &DCOP; del proceso. (kmdr-executor-@pid)

`@dialog(`diálogo`[,`parámetros`])`

- Lanza el cuadro de diálogo de Kommander especificado, que se obtiene del directorio de diálogos y del actual, en ese orden. Esta tarea se lleva a cabo antes de invocar al ejecutor y establece el directorio predeterminado en el que se encuentra Kommander. Los parámetros se pueden pasar al estilo de Unix o por nombre, como variable=valor. Luego puede buscar los parámetros globales facilitados: @global(variable) devolvería valor.

`@env(`variableDeEntorno`)`

- Expande la variable de entorno especificada. @env(PWD) se expande como $PWD. Recuerde que $ es parte de la shell y no se debe usar.

`@exec(`orden`)`

- devuelve la salida de la ejecución de la orden especificada. @exec(ls -l).

`@execBegin ... @execEnd`

- igual que `@exec`, pero admite shebang y guiones de varias líneas. Sirve para varios lenguajes de guiones, declarándolos o usando un shebang.

  - `@execBegin(php)`

  - `@execBegin`#!/usr/bin/php

  El primero usa el nombre del ejecutable PHP. &kommander; busca php en el PATH y, si no lo encuentra, busca si está registrado con &kommander; en una ubicación externa. Si no fuera así, le diría al usuario que no se puede encontrar. El segundo ejemplo usa el clásico shebang, que posee algunas ventajas pero también ciertos inconvenientes. Si tiene una copia de la beta de PHP5, por ejemplo, en `/usr/local/bin`, podría no encontrarse por no estar en `/usr/bin`, y para ello el shebang sería muy útil. Sin embargo, si distribuye el cuadro de diálogo a alguien que tenga PHP en `/opt/bin`, no lo encontrará cuando use shebang. Por tanto, utilícelos con cuidado y, si va a compartir archivos, se recomienda que use el ejecutable.

`@global(`variable`)`

- expande el valor de la variable global especificada.

`@null`

- Devuelve null (nulo). Ahora que Kommander comprueba en ejecución si widgetText está vacío, esto evitará falsos errores en caso de que haya un estado no definido en el widget.

`@parentPid`

- El &PID; del proceso padre.

`@pid`

- El &PID; del proceso.

`@readSetting(`clave`, `valorPredeterminado`)`

- lee un valor de `kommanderrc`

`@selectedWidgetText`

- el contenido seleccionado de un widget que puede mostrar más de un valor, como una lista

`@setGlobal(`variable`, `valor`)`

- Establece el valor de la variable global especificada.

`@widgetText`

- el contenido de un widget

`@writeSetting(`clave`, `valor`)`

- escribe un valor en `kommanderrc`

## Grupo de funciones de vectores

`@Array.values(`array`)`

- Devuelve una lista de todos los valores del array, separados por EOL. Se puede usar para recorrer todos sus elementos.

`@Array.keys(`array`)`

- Devuelve una lista con todas las claves del array, separadas por EOL.

`@Array.setValue(`array`, `clave`, `valor`)`

- Define una clave y un valor para un elemento del array. Si no existe el array, se crea.

`@Array.clear(`array`)`

- Elimina todos los elementos del array.

`@Array.count(`array`)`

- Devuelve el número de elementos del array.

`@Array.value(`array`,`clave`)`

- Devuelve el valor asociado a la clave dada.

`@Array.remove(`array`,`clave`)`

- Elimina el elemento del array que hay en la clave dada.

`@Array.fromString(`array`,`cadena`)`

- Añade al array todos los elementos de la cadena de caracteres, que debe tener el formato clave\tvalor\n."

`@Array.toString(`array`,`cadena`)`

- "Devuelve todos los elementos del array en el formato clave\tvalor\n."

## Grupo de funciones de archivo

`@File.read(`archivo`)`

- Devuelve el contendo del archivo dado.

`@File.write(`archivo``cadena`)`

- Escribe la cadena de caracteres dada en el archivo.

`@File.append(`archivo``cadena`)`

- Añade la cadena de caracteres dada al final del archivo.

## Grupo de funciones de cadenas de caracteres

`@String.length(`cadena`)`

- Devuelve el número de caracteres de la cadena de caracteres.

`@String.contains(`cadena`,`subcadena`)`

- Comprueba si la cadena de caracteres contiene la subcadena dada.

`@String.find(`cadena`)`

- Devuelve la posición de una subcadena de caracteres en la cadena, o -1 si no se encuentra.

  Tendrá una posición de comienzo, opcional y de tipo entero, a la que se dará uso en la alfa 6.

`@String.left(`cadena`, `entero`)`

- Devuelve los n primeros caracteres de la cadena.

`@String.right(`cadena`, `entero`)`

- Devuelve los n últimos caracteres de la cadena.

`@String.mid(`cadena`, `inicio`, `fin`)`

- Dada una cadena de caracteres, devuelve la subcadena entre las posiciones indicadas.

`@String.remove(`cadena`, `subcadena`)`

- Elimina todas las ocurrencias de una subcadena de caracteres dada.

`@String.replace(`cadena`, `subcadena buscada`, `subcadena reemplazo`)`

- Reemplaza todas las ocurrencias de una subcadena de caracteres con un reemplazo dado.

`@String.upper(`cadena`)`

- Convierte la cadena de caracteres a mayúsculas.

`@String.lower(`cadena`)`

- Convierte la cadena de caracteres a minúsculas.

`@String.compare(`cadena1`, `cadena2`)`

- Compara dos cadenas de caracteres. Devuelve 0 si son iguales. -1 si la primera es menor, 1 si la primera es mayor

`@String.isEmpty(`cadena`)`

- Comprueba si la cadena de caracteres está vacía.

`@String.isNumber(`cadena`)`

- Comprueba si la cadena de caracteres es un número válido.

## Globales incorporadas

A las variables globales incorporadas se accede como a las globales habituales, con `@global`.

`@global(_KDDIR)`

- El directorio en el que está el cuadro de diálogo actual.

`@global(_NAME)`

- El nombre del cuadro de diálogo