<?xml version="1.0"  encoding="UTF-8" ?>

<sect1 id="specials">
<sect1info>
<title
>Especiales y variables globales internas</title>
<authorgroup>
<author
><firstname
></firstname
> <surname
></surname
> <affiliation
><address
> <email
></email>
</address
></affiliation>
</author>

<othercredit role="translator"
><firstname
>Juan Manuel</firstname
> <surname
>García Molina</surname
> <affiliation
><address
><email
>juanma@superiodico.net</email
></address
></affiliation
><contrib
>Traductor</contrib
></othercredit
> <othercredit role="translator"
><firstname
>Cristina Yenyxe</firstname
> <surname
>González García</surname
> <affiliation
><address
><email
>the.blue.valkyrie@gmail.com</email
></address
></affiliation
><contrib
>Traductor</contrib
></othercredit
> 

</authorgroup>
</sect1info>

<title
>Especiales y variables globales internas</title>

<para
>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 guion. En la mayoría de casos no suele ser un problema, pero en algunos sí. </para>

<variablelist>
<varlistentry>
<term
><function
>@dcop(<parameter
>appId</parameter
>, <parameter
>objeto</parameter
>, <parameter
>función</parameter
>, <parameter
>argumentos</parameter
>)</function
></term>
<listitem>
<para
>Hace una llamada &DCOP;. @dcop(<quote
>kmail</quote
>, <quote
>KMailIface</quote
>, <quote
>checkMail()</quote
>, <quote
></quote
>) </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@dcopid</function
></term>
<listitem>
<para
>El id. &DCOP; del proceso. (kmdr-executor-@pid) </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@dialog(<parameter
>diálogo</parameter
>[,<parameter
>parámetros</parameter
>])</function
></term>
<listitem>
<para
>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 <quote
>variable=valor</quote
>. Luego puede buscar los parámetros globales facilitados: @global(variable) devolvería <quote
>valor</quote
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@env(<parameter
>variableDeEntorno</parameter
>)</function
></term>
<listitem>
<para
>Expande la variable de entorno especificada. @env(PWD) se expande como $PWD. Recuerde que <quote
>$</quote
> es parte de la shell y no se debe usar. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@exec(<parameter
>orden</parameter
>)</function
></term>
<listitem>
<para
>devuelve la salida de la ejecución de la orden especificada. @exec(ls -l). </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@execBegin ... @execEnd</function
></term>
<listitem>
<para
>igual que <function
>@exec</function
>, pero admite shebang y guiones de varias líneas. Sirve para varios lenguajes de guiones, declarándolos o usando un shebang. </para>
<itemizedlist>
<listitem
><para
><function
>@execBegin(php)</function
></para
></listitem>
<listitem
><para
><function
>@execBegin</function
>#!/usr/bin/php</para
></listitem>
</itemizedlist>
<para
>El primero usa el nombre del ejecutable <acronym
>PHP</acronym
>. &kommander; busca <application
>php</application
> 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 <quote
>shebang</quote
>, que posee algunas ventajas pero también ciertos inconvenientes. Si tiene una copia de la beta de <acronym
>PHP5</acronym
>, por ejemplo, en <filename
>/usr/local/bin</filename
>, podría no encontrarse por no estar en <filename
>/usr/bin</filename
>, y para ello el shebang sería muy útil. Sin embargo, si distribuye el cuadro de diálogo a alguien que tenga <acronym
>PHP</acronym
> en <filename
>/opt/bin</filename
>, no lo encontrará cuando use shebang. Por tanto, utilícelos con cuidado y, si va a compartir archivos, se recomienda que use el ejecutable.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@global(<parameter
>variable</parameter
>)</function
></term>
<listitem>
<para
>expande el valor de la variable global especificada. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@null</function
></term>
<listitem>
<para
>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.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@parentPid</function
></term>
<listitem>
<para
>El &PID; del proceso padre. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@pid</function
></term>
<listitem>
<para
>El &PID; del proceso. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@readSetting(<parameter
>clave</parameter
>, <parameter
>valorPredeterminado</parameter
>)</function
></term>
<listitem>
<para
>lee un valor de <filename
>kommanderrc</filename
> </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@selectedWidgetText</function
></term>
<listitem>
<para
>el contenido seleccionado de un widget que puede mostrar más de un valor, como una lista </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@setGlobal(<parameter
>variable</parameter
>, <parameter
>valor</parameter
>)</function
></term>
<listitem>
<para
>Establece el valor de la variable global especificada. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@widgetText</function
></term>
<listitem>
<para
>el contenido de un widget </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@writeSetting(<parameter
>clave</parameter
>, <parameter
>valor</parameter
>)</function
></term>
<listitem>
<para
>escribe un valor en <filename
>kommanderrc</filename
> </para>
</listitem>
</varlistentry>
</variablelist>

<sect2 id="arrays">
<title
>Grupo de funciones de vectores</title>

<variablelist>
<varlistentry>
<term
><function
>@Array.values(<parameter
>array</parameter
>)</function
></term>
<listitem>
<para
>Devuelve una lista de todos los valores del array, separados por EOL. Se puede usar para recorrer todos sus elementos.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.keys(<parameter
>array</parameter
>)</function
></term>
<listitem>
<para
>Devuelve una lista con todas las claves del array, separadas por EOL.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.setValue(<parameter
>array</parameter
>, <parameter
>clave</parameter
>, <parameter
>valor</parameter
>)</function
></term>
<listitem>
<para
>Define una clave y un valor para un elemento del array. Si no existe el array, se crea.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.clear(<parameter
>array</parameter
>)</function
></term>
<listitem>
<para
>Elimina todos los elementos del array.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.count(<parameter
>array</parameter
>)</function
></term>
<listitem>
<para
>Devuelve el número de elementos del array.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.value(<parameter
>array</parameter
>,<parameter
>clave</parameter
>)</function
></term>
<listitem>
<para
>Devuelve el valor asociado a la clave dada.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.remove(<parameter
>array</parameter
>,<parameter
>clave</parameter
>)</function
></term>
<listitem>
<para
>Elimina el elemento del array que hay en la clave dada.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.fromString(<parameter
>array</parameter
>,<parameter
>cadena</parameter
>)</function
></term>
<listitem>
<para
>Añade al array todos los elementos de la cadena de caracteres, que debe tener el formato <emphasis
>clave\tvalor\n</emphasis
>."</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@Array.toString(<parameter
>array</parameter
>,<parameter
>cadena</parameter
>)</function
></term>
<listitem>
<para
>«Devuelve todos los elementos del array en el formato <emphasis
>clave\tvalor\n</emphasis
>.»</para>
</listitem>
</varlistentry>

</variablelist>
</sect2>

<sect2 id="files">
<title
>Grupo de funciones de archivo</title>
<variablelist>

<varlistentry>
<term
><function
>@File.read(<parameter
>archivo</parameter
>)</function
></term>
<listitem>
<para
>Devuelve el contendo del archivo dado.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@File.write(<parameter
>archivo</parameter
><parameter
>cadena</parameter
>)</function
></term>
<listitem>
<para
>Escribe la cadena de caracteres dada en el archivo.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@File.append(<parameter
>archivo</parameter
><parameter
>cadena</parameter
>)</function
></term>
<listitem>
<para
>Añade la cadena de caracteres dada al final del archivo.</para>
</listitem>
</varlistentry>

</variablelist>
</sect2>

<sect2 id="strings">
<title
>Grupo de funciones de cadenas de caracteres</title>
<variablelist>

<varlistentry>
<term
><function
>@String.length(<parameter
>cadena</parameter
>)</function
></term>
<listitem>
<para
>Devuelve el número de caracteres de la cadena de caracteres.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.contains(<parameter
>cadena</parameter
>,<parameter
>subcadena</parameter
>)</function
></term>
<listitem>
<para
>Comprueba si la cadena de caracteres contiene la subcadena dada.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.find(<parameter
>cadena</parameter
>)</function
></term>
<listitem>
<para
>Devuelve la posición de una subcadena de caracteres en la cadena, o -1 si no se encuentra.</para>
<note
><para
>Tendrá una posición de comienzo, opcional y de tipo entero, a la que se dará uso en la alfa 6.</para
></note>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.left(<parameter
>cadena</parameter
>, <parameter
>entero</parameter
>)</function
></term>
<listitem>
<para
>Devuelve los n primeros caracteres de la cadena.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.right(<parameter
>cadena</parameter
>, <parameter
>entero</parameter
>)</function
></term>
<listitem>
<para
>Devuelve los n últimos caracteres de la cadena.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.mid(<parameter
>cadena</parameter
>, <parameter
>inicio</parameter
>, <parameter
>fin</parameter
>)</function
></term>
<listitem>
<para
>Dada una cadena de caracteres, devuelve la subcadena entre las posiciones indicadas.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.remove(<parameter
>cadena</parameter
>, <parameter
>subcadena</parameter
>)</function
></term>
<listitem>
<para
>Elimina todas las ocurrencias de una subcadena de caracteres dada.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.replace(<parameter
>cadena</parameter
>, <parameter
>subcadena buscada</parameter
>, <parameter
>subcadena reemplazo</parameter
>)</function
></term>
<listitem>
<para
>Reemplaza todas las ocurrencias de una subcadena de caracteres con un reemplazo dado.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.upper(<parameter
>cadena</parameter
>)</function
></term>
<listitem>
<para
>Convierte la cadena de caracteres a mayúsculas.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.lower(<parameter
>cadena</parameter
>)</function
></term>
<listitem>
<para
>Convierte la cadena de caracteres a minúsculas.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.compare(<parameter
>cadena1</parameter
>, <parameter
>cadena2</parameter
>)</function
></term>
<listitem>
<para
>Compara dos cadenas de caracteres. Devuelve 0 si son iguales. -1 si la primera es menor, 1 si la primera es mayor</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.isEmpty(<parameter
>cadena</parameter
>)</function
></term>
<listitem>
<para
>Comprueba si la cadena de caracteres está vacía.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>@String.isNumber(<parameter
>cadena</parameter
>)</function
></term>
<listitem>
<para
>Comprueba si la cadena de caracteres es un número válido.</para>
</listitem>
</varlistentry>

</variablelist>
</sect2>

<sect2 id="builtins">
<title
>Globales incorporadas</title>
<para
>A las variables globales incorporadas se accede como a las globales habituales, con <function
>@global</function
>.</para>
<variablelist>
<varlistentry>
<term
><function
>@global(_KDDIR)</function
></term>
<listitem>
<para
>El directorio en el que está el cuadro de diálogo actual.</para>
</listitem>
</varlistentry>
<varlistentry>
<term
><function
>@global(_NAME)</function
></term>
<listitem
><para
>El nombre del cuadro de diálogo</para
></listitem>
</varlistentry>
</variablelist>
</sect2>

</sect1>
