%TODO: please mention the /def/rules mechanism!


%guide to wmii-3
%Copyright (C) 2005, 2006 by Steffen Liebergeld, Salva Peir\'o

%This program is free software; you can redistribute it and/or
%modify it under the terms of the GNU General Public License
%as published by the Free Software Foundation, version 2

%This program is distributed in the hope that it will be useful,
%but WITHOUT ANY WARRANTY; without even the implied warranty of
%MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%GNU General Public License for more details.

%You should have received a copy of the GNU General Public License
%along with this program; if not, write to the Free Software
%Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
%02110-1301, USA.

\documentclass[12pt,a4paper]{article} %options given to article are inherited to all packages
\usepackage[utf8x]{inputenc}
\usepackage{ucs}
\usepackage[english,spanish,catalan]{babel}
\usepackage[left=3cm,top=2cm,right=2cm,bottom=3cm]{geometry}
\usepackage{times}
\usepackage{hyperref} % option [dvipdfm] disables clickable refs
\hypersetup{pdftex, colorlinks=true, linkcolor=blue, filecolor=blue,
pagecolor=blue, urlcolor=blue, pdfauthor={Steffen Liebergeld, Salva Pei\'ro},
pdftitle={Una Guía a wmii-3}}
\usepackage{indentfirst,moreverb}
% remove this if you want, it's just a matter of imposed imperialist cultures
% so if I'm given the chance to choose I choose to indent the first paragraph
% (I learn this way in the school, and don't want to relearn the British way)

%% welcome to the dirty tricks section
\newcommand{\hrefx}[1]{\href{#1}{#1}} % explicit \href
% un'% below so latex2html can handle refs correctly (until a better solution is found)
\usepackage{html} % gives clickable refs to latex2html
\renewcommand{\href}[2]{\htmladdnormallink{#2}{#1}}
\renewcommand{\hrefx}[1]{\htmladdnormallink{#1}{#1}}
%\renewcommand{\verbatiminput}[1]{\input{#1}}
%\renewcommand{\familydefault}{\sfdefault}

\newcommand{\wmii}{\emph{wmii}}
\newenvironment{itemize*}
	{\begin{itemize}\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
	{\end{itemize}}

\date{\today}
\author{
Steffen Liebergeld \\
{\centering \small con ayuda de}
{\normalfont \large Salvador Peir\'o}
}

\title{Una Guía a wmii-3%
\thanks{Gracias a la comunidad de wmii, en particular a toda la 
gente mencionada en\href{http://wmii.de/index.php/WMII/People}{WMII/people}.}
}
%\email{stepardo@gmail.com \and saoret.one@gmail.com}

\begin{document}

\maketitle

\tableofcontents

\newpage

\section{Abstract}

  \subsection{El proposito de este documento}

    Este documento trata de ser un buen punto de comienzo para la gente
    que no conoce \wmii-3. La gente que ha usado wmii, \wmii-2.5 o hasta
    ion conceran las novedades y diferencias de \wmii-3, y la gente que nunca
    antes ha usado un gestor de ventanas en cascada antes se enamoraran del
    nuevo concepto.
  
  \subsection{wmii---la segunda generación del gestor de ventanas mejorado}

    \wmii-3 es un nuevo tipo de gestor de ventanas. Está diseñado para tener
    una baja utilización de memoria,s ser extremadamente modular y tener
    tan poco código como sea posible, asegurando por tanto tan pocos errores
    como sea posible. De hecho, una de nuestras metas oficiales es no exceder
    las $10 k$ líneas de código~\footnote{Una ventaja de la restricción de $10 k$
    es que es más sencilllo de leer/comprender, y por tanto de utilizar y
    acostumbrarse a trabajar con él.}.
    
     \wmii{} intenta ser muy portable y dar al usuario toda la libertad posible.
     
     \wmii-3 es el tercer lanzamiento más importante de la segunda generación
     del gestor de ventanas mejorado~\footnote{El ii  es en efecto el número 2
     en el sistema de numeración romano.}. \wmii{} introdujo en la versión 2.5,
     un nuevo paradigma, llamado gestión de ventanas dinámica, que supera
     las limitaciones impuestas por el paradigma WIMP ( ver también el
     acompañante \emph{wmii.tex}).
  
  \subsection{Audiencia de este documento}

    Asumo que el lector tiene experiencia con Unix, conoce la terminolgía
    básica y los conceptos como ficheros y editores.
    
    Espero que estes abierto a nuevas ideas y queiras pasar algún tiempo
    tiempo aprendiendo \wmii-3~\footnote{Recuerda el refrán: ``nadie
    te puede enseñar aquello que no quieres saber''.}.
    
    Si únicamente queires saber como trabajar con \wmii-3 y no estas
    interesado en los detalles internos o en el \emph{scripting}, deberias
    leer las secciones \ref{sec:conf&install}, \ref{sec:terms} y la subsección
    \ref{subsec:firststeps} y saltarte el resto.
    
    Sin embargo, para sacarle el máximo partido a \wmii-3 deberias probablemente
    leer el documento completo de forma secuencial, i.e. de principio a fin.
    Otra posibilidad es leer/consumir la guia ``cuando lo necesites'' cuando te
    des cuenta de que necesitas más información o detalles para comprender
    mejor un determinado concepto. Te recomendamos leer los documentos
    introductorios primero, tomarte un tiempo hasta que afianzes en el mundo-\wmii
    y leer los capítulos sobre \emph{scripting} más tarde.

    \section{Configuración e instalación}
    \label{sec:conf&install}

    \subsection{Consiguiendo wmii}
    
    \wmii{} se distribuye bajo la licencia del Consorcio MIT/X, que bàsicamente
    implica que es software libre, y puedes descargarlo de \hrefx{http://wmii.de}
    sin ningún coste adicional~\footnote{ por favor echale un vistazo a 
    \hrefx{http://wmii.de/repos/wmii/LICENSE} para más detalles.}.
    
    \subsection{Configuración e Instalación}
    
    En primer lugar, comprueba que hay paquetes binarios de \wmii{} para
    tu distribución. Debian, Ubunto y Gentoo deben tener ya paquetes presentables.
    Si encuentras un paquete que ofrezca garantias, puedes tranquilamente saltarte
    esta sección.
    
    Para aquellos que todavía se encuentren leyendo esta sección, dejadme deciros
    que estais en el camino adecuado, porque si obtienes los fuentes y los compilas
    tu mismo te beneficiarás de tener todo en su lugar original, lo que facilitarà tu
    uso de \wmii.
    
    \begin{enumerate}
      
    \item Desinstalando una versión previa:
      \begin{verbatim}
        cd /ruta/al/antiguo-wmii
        make uninstall && make clean 
      \end{verbatim}

      En el caso de que estes instalando una versión más nueva de \wmii,
      esta es la primera cosa que deberias hacer, de otra forma terminarás
      mezclando binarios, ficheros de configuración y páginas de manual de
      diferentes y versiones potencialmente incomptabiles.
 
    \item Desempaquetando:
      \begin{verbatim}
        tar xzf wmii-3.tar.gz
        cd wmii-3
      \end{verbatim}
      
    \item Editando el fichero de configuración:
      \begin{verbatim}
        vim config.mk
      \end{verbatim}
      
      La variable más importante a especificar es \verb+PREFIX+, que
      indica donde quieres que se instale \wmii-3. Si no estas seguro,
      dejar la opción por defecto, es bastante seguro y no romperá nada.
      
    \item Lanzando make y make install:
      \begin{verbatim}
        make && make install
      \end{verbatim}
      
    \item Poniendo a punto el servidor de X para arrancar \wmii{} como
    tu gestor de ventanas por defecto. Puedes hacer esto editando el fichero
    \emph{\~{}/.xinitrc}.

      \begin{verbatim}
        #!/bin/sh
        exec wmii
      \end{verbatim}

      % No es necesario, .xinitrc es incluido por xinit de todas formas
      %
      %     Asegurate de que el \emph{\~{}/.xinitrc} es ejecutable:
      %
      %    \begin{verbatim}
      %      chmod u+x ~/.xinitrc
      %    \end{verbatim}

    \end{enumerate}
    
    Ahora que has terminado. Por favor ten en cuenta que las herramientas de autoconf
    no han sido utilizadas por varias razones~\footnote{ lee
     \hrefx{http://www.ohse.de/uwe/articles/aal.html} y
      \hrefx{http://lists.cse.psu.edu/archives/9fans/2003-November/029714.html}
    for further details}. Por favore no preguntes a los desarrolladores de \wmii{}
    para que usen autoconf, ya que no lo harán.

    \section{Terminología}
    \label{sec:terms}  

    Antes de que puedas comenzar a dar tus primeros pasos con \wmii,
    tenemos que aclarar la terminología.

    \subsection{Clientes}

    Un cliente es un programa, que proporociona una interfáz gráfica para
    un propósito especial, e.g. un navegador web, o una terminal.
    
    \subsection{Foco}

    El foco (de entrada) es el cliente, que actualmente está recibiendo
    tus entradas.
    En X11 exactamente un cliente puede recibir tus entradas en 
    cada momento. Si tu tecleas algún comando en tu terminal, la ventana
    de la terminal tiene el foco, mientras que todas las demas ventanas
    no reciben los carácteres que tecleas.
    
    \subsection{Eventos}

    Un evento es un mensaje generado por el servidor de X para avisar a
    los clientes X sobre su estado. Por ejemplo, el servidor de X genera un
    evento de botón presionado si tu haces click con el ratón sobre una ventana.
    
    \subsection{Etiquetas \emph{(tags)}}

    Una etiqueta es una cadena de carácteres alfanumérica que tu puedes asociar
    a los clientes, lo que te permite agrupar tus clientes de una forma natural.

    En \wmii, no existe el concepto de ``espacio de trabajo'' \emph{workspace}. 
    En cambio, todos los clientes que coincidan con una etiqueta en particular
    se muestran en cada instante de tiempo en la pantalla. Por ejemplo si etiquetas
    tu navegador web y una ventana de terminal con la etiqueta ``web-browser'',
    y solicitas ver todos los clientes que coincidan con esta etiqueta, \wmii{} te
    mostrará el navegador y la terminal en la pantalla.
    También puedes asignar múltiples etiquetas a los clientes, descrito a continuación.
    
    \subsection{Etiqueta visible \emph{(view)}}

    Una view es el conjunto de clientes mostrados, que coinciden con una 
    etiqueta específica. Una view es similar a la metáfora de ``espacio de trabajo''
    utilizada en otros gestores de ventanas, aunque más potente.

    Sólo una  view es visible en un momento dado.

    Las views están relacionadas con las etiquetas, que se están utilizando en cada
    momento. Tienes exactamente una única view por cada una de las etiquetas,
    luego únicamente puedes ver conjuntos de clientes que coincidan con alguna
    de las etiquetas existentes.

    Si destruyes el último y único cliente de una determinada etiqueta, la view de
    dicha etiqueta será destruida.

    \subsection{Columnas \emph{(columns)}}

    Una columna es una parte distinta de una view, donde los clientes
    se organizan automáticamente en dirección vertical.

    En \wmii, puedes organizar cada view en diferentes columnas.
    Debes de saber que cada columna contiene al menos un cliente.
    Tan pronto como cierres el último cliente de una columna, la columna
    será destruida automaticamente.
    
    % no, una view podria contener únicamente clientes flotantes también
    %      Por favor, tener en cuenta que cada view tiene al menos 1 columna o cliente flotante.

    \subsection{Disposición \emph{(Layout)}}

    Una disposición, es la organización de los clientes en una columna.
    Hay tres diferentes formas de organizar los clientes en una columna.

    \paragraph{default} Esta disposición organiza a cada cliente, asignando
    a cada uno de ellos el mismo espacio vertical según la altura de la columna.

    \paragraph{maximum} Esta disposición organiza todos los clientes con la misma
    geometria qu ela columna, mostrando sólo uno de ellos en cada momento.

    \paragraph{stacking} Esta disposición organiza todos los clientes como en una pila,
    donde sólo el cliente que tiene el foco, es completamente visible, y todos los demas
    clientes pueden alcanzarse a traves de sus barras de títulos.
    Este es un enfoque alternativo \emph{tabbing}, i.e. la organización por pestañas o
    hojas existente en otras aplicaciones.

    \section{Empezando}

    Es el momento de sumergirse en \wmii{}. Te sugiero que pruebes por ti mismo
    todo a medida que vas leyendo, en vez de leerlo todo de una vez, para evitar 
    ``perdidas de memoria''. Es muy útil tener disponible este documento en papel
    o disponible en una pantalla distinta, porque no serás capaz de verlo durante
    tus primeros pasos con \wmii.
    
    Ten en cuenta que la tecla \emph{MOD} a la que me refiero, podria corresponderse
    con diferentes teclas en distintos sistemas. Por defecto es la tecla \emph{Mod1} o
    \emph{Alt} en X11. Normalmente está etiquetada con \emph{Alt} en el teclado.

    La notación \emph{MOD}-\emph{tecla} siginfica que presiones \emph{MOD} y
    \emph{tecla} a la vez.

    Todas las combinaciones de teclas pueden ser configuradas, pero para
    simplificar me atendré a las combinaciones de teclas por defecto.
    Aprendrerás como modificar las combinaciones de teclas en la
    sección \ref{sec:scripting}.

    Las combinaciones de teclas por defecto utilizan fundamentalemente
    la fila de teclas \emph{hjkl} como teclas de navegación:
    \emph{h} (izquierda), \emph{j} (abajo), \emph{k} (arriba), y \emph{l} (derecha)
    que estan asociadas con cada dirección específica.
    
    \subsection{Primeros pasos}
    \label{subsec:firststeps}

    Arranca tu sessión de X. Dado que es la primera vez que arrancas \wmii,
    una ventana con un pequeño tutorial aparecerá. Puedes elegir leerlo,
    pero deberias seguir tambien esta guia :-).
    
    En primer lugar, presiona \emph{MOD-Enter} para abrir un xterm.
    Ocupará la mitad del espacio vertical disponible, asi tienes dos
    ventanas con la misma disposición. Si presionas \emph{MOD-Enter}
    otra vez, tendras tres ventanas con la misma disposición.
    
    Para moverte entre las tres ventanas,
    presiona \emph{MOD-j}, que alterna el foco entre las tres ventanas.
    
    También puedes presionar \emph{MOD-k} para cambiar a la ventana
    de arriba o \emph{MOD-j} para cambiar a la ventana abajo de la actual.
    
    Ahora mira a las barras de título de estas ventanas.
    Muestran información importante: la primera parte contiene la etiqueta
    de la ventana. La segunda parte muestra el título de la ventana.
    
    La barra de estado en la parte inferior de la pantalla muestra información
    similar. La primera parte de esta muestra las etiquetas que están siendo
    utilizadas en este momento y destacan la vista seleccionada en cada momento.
    En la parte derecha se muestra una información de estado dels sistema,
    por defecto la carga del sistema y la fecha actual
    (ver la subsección~\ref{subsec:status} para más detalles).

    \subsection{Usando las columnas}

    Como se ha descrito previamente, \wmii{} utiliza columnas para organizar
    tus ventanas. Tu vista en este momento está compuesta por una única columna.
    A continuación crearas una nueva columna.
    
    En \wmii{} las columnas siempre consisten almenos de un único cliente,
    por tanto para crear una nueva columna, necesitas almenos dos clientes a mano.
    
    Ahora selecciona el cliente que desees y presiona \emph{MOD-Shift-l},
    que mueve el cliente a la derecha. Como ves, \wmii{} crea una nueva
    columna dividiendo la vista horizontalmente en dos areas del mismo tamaño.
    El cliente seleccionado se translada a la nueva columna.
    
    Si terminas el último cliente de una columna, la columna se destruye
    inmediatamente. Si el último cliente de la vista actual termina,
    la vista será eliminada de la misma forma.
    
    Si presionas \emph{MOD-j} para cambiar el foco, veras que \wmii{}
    realmente alterna el foco en la columna actual únicamente.
    
    Para cambiar el foco a una columna distinta, puedes presionar
    \emph{MOD-l} (derecha) y \emph{MOD-h} (izquierda) respectivamente.
    
    También es posible intercambiar clientes adyacentes entre columnas.
    Para intercambiar clientes hacia la izquierda, presiona \emph{MOD-Control-h}.
    Para intercambiar clieintes hacia la derecha, presiona \emph{MOD-Control-l}.

    \subsection{Utilizando las disposiciones?}

    Las disposiciones controla la organización de los clientes en una columna.
    Operan a nivel de columnas. Así es posible tener diferentes columnas en 
    una vista, donde cada una de ellas utiliza una disposición diferente.
    
    La disposición por defecto organiza cada cliente de la columna con el
    mismo espacio vertical. Puedes activar esta disposición con \emph{MOD-d}
    (donde la ``d'' viene de default) explicitamente.
    
    La disposición apilada, puede activarse con \emph{MOD-s}
    (``s'' de \emph{stacking}).
    Como ahora ves, hay solo un cliente que utiliza tanto espacio como es posible,
    y de los otros clientes en la columna únicamente se ven la barras de títulos.
    Puedes alternar entre los clientes en la columna utilizando \emph{MOD-j}.
    
    La disposición maximizada, maximiza todos los clientes para que utilizen
    la misma geometria que la columna. Únicamente se muestra el cliente
    seleccionado, mientras que los demas clientes quedan ocultados por este.
    Puedes alternar entre los clientes con \emph{MOD-j}.

    \subsection{Capa Flotante}

    Para manejar clientes de forma clásica, como en los gestores de ventanas
    convencionales, existe la llamada ``capa flotante''. En la actualidad
    hay unos cuantos clientes que no encajan en la gestión dinámica de ventanas,
    porque han sido diseñados con el concepto de gestor de ventanas tradicional
    en mente, por ejemplo clientes como Gimp o xmms.
    
    Mientras \wmii{} es un gestor de ventanas dinámico, que organiza las ventanas
    por tí de forma automática, estos programas ``a la antigua'' confian en
    una gestión de ventanas convencional, donde todos los clientes vuelan por
    tu escritorio y tienes poner orden constantemente.

    Para asociar estos clientes ``maleducados'' a la capa flotante,
    puedes  alternar el foco entre la capa flotante y la gestionada presionando
    \emph{MOD-space}.
    La combinación \emph{MOD-Shift-space} cambia la ventana seleccionada
    entre la capa flotante y la gestionada.
    
    Nota, la capa flotante se corresponde internamente con la columna 0.

    \subsection{Etiquetas}

    Hasta el momento todos tus clientes han sido etiquetados con ``1'',
    y únicamente tenias una vista. Pero una única vista no escala bien
    cuando se tienen muchos clientes que se utilizan para distintas tareas.
    Entonces podria interesarte tener una vista por tarea, e.g. una vista con
    tu editor y tus herramientas de programación, otra vista con
    tu navegador, y una tercera vista con tu reproductor de música.
    
    La buena noticia es, que el concepto de etiquetado proporciona una
    forma dinámica de conseguir tales tipos de asociaciones.
    
    Puedes etiquetar el cliente seleccionado presionando
    \emph{MOD-Shift-Number}, donde number es un número del 0 al 9.
    
    Puedes cambiar entre vistas presionando \emph{MOD-Number}.
    
    Normalmente, cuando un nuevo cliente aparece, automáticamente hereda
    la etiqueta de la vista actualmente seleccionada.

    %% TODO: better tag handling (this is about to change in \wmii{} till 
    %%version 3)

    Ten en cuenta que hay formas más pontentes de utilizar etiquetas,
    aprenderás sobre estas en el próximo capítulo. Entonces podras asignar
    multiples etiquetas a un cliente y a utilizar como etiquetas textos
    apropiados.

    \subsection{¿Cómo cerrar una ventana?}

    La mayoria de clientes tienen una opción de menu o botón para cerrarlos.
    En raros casos no proporcionan una interfaz para el ratón, como en la
    mayoria de terminales, puedes presionar \emph{MOD-Shift-c} para cerrar
    una ventana.

    \subsection{¿Como arrancar programas?}

    Puedes arrancar programas desde una terminal. Pero \wmii{} contiene
    un menu controlado por teclado, al que se puede acceder tecleando
    \emph{MOD-p}. El contenido de este menu es proporcionado por un
    sencillo shell-script.
    
    Verás una lista de programas. Si tu comienzas a teclear,
    el menu recortará la lista y únicamente mostrará los items
    que casan con el texto que has escrito hasta el momento.
    Cuando hay un único elemento en la lista, este aparece
    resaltado en el menu y puedes arrancarlo presionando \emph{Enter}.
    Puedes cancelar cualquier acción presionando \emph{ESC}.
    
    Luego, si quieres arrancar firefox, simplemente escribe ``fire''
    y presiona enter~\footnote{En mi sistema es suficiente con 
    teclear ``efo'' para arrancar firefox ;-)}.

    \subsection{¿Como salir de wmii?}
    Puedes terminar \wmii, por medio del menú de acciones (\emph{MOD-a})
    y seleccionar la acción ``quit''. Eso es todo.
    
    \section{Mirando bajo el capó}

    En este capítulo aprenderás como \wmii{} fue diseñado, que ideas
    siguieron los desarrolladores de \wmii{} y como fue implementado.

    \subsection{Gestión de ventanas dinámica}

    \wmii{} fue diseñado con la idea de la gestión de ventanas dinámica en mente.
    La gestión de ventanas dinámica significa, que el gestor de ventanas
    deberia realizar todas las decisiones acerca de la organización y la disposición
    de ventanas, aligerando el trabajo del usuario y permitiendo 
    que este se concentre en su trabajo. Esto también puede ser visto
    como gestión de ventanas tácita.

    \subsection{Modularidad ---usando una herramienta para cada tarea}

    Los desarrolladores de \wmii{} conocen acerca de las ideas más útiles de
    Unix. Una de ellas es la idea de utilizar distintas herramientas para distintas
    tareas. Al diseñar cuidadosamente el gestor de ventanas, fueron capaces de
    dividir la tarea en varios binarios de reducido tamaño, específicos para cada tarea.
    
    \subsection{The glue that puts it all together---9P}

    Los programas en el mundo de Unix normalmente se comunican por medio
    de buffers que son accedidos por descriptores (de ficheros), uno de ellos
    son los sockets.

    Para crear un protocolo de comunicación ligero pero potente, los
    desarrolladores de \wmii estudiaron el diseño de Plan 9 y eligieron el
    protocolo 9P.

    Las ideas fundamentales para configurar y arrancar \wmii{} han sido
    tomadas de Acme user interface for programmers of Plan 9. Al igual
    que Acme, \wmii{} proporciona una interfaz por medio de un sistema
    de ficheros, a la que se accede por medio del protocolo 9P. Esto permite
    la interacción con cualquier tipo de aplicación a traves de una interfaz de
    ficheros, que puede ser implementada bajo cualquier lenguaje.
    El protocolo 9P además la libertad al programador de elegir el lenguaje y
    el paradigma de desarrollo.
    
    La interfáz de \wmii{} puede compararse con el sistema de ficheros
    \emph{procfs} del nucleo de Linux.
    
    Si quieres interactuar con un proceso \wmii{} en ejecución, puedes
    acceder a los ficheros que sirve a traves de 9P bien utilizando la herramienta
    \emph{wmiir}, bien utilizando el módulo de kernel 9P2000, disponible a partir
    de la versión 2.6.14+ de nucleo de Linux. Utilizar el módule del kernel tiene
    la ventaja de montar el sistema de ficheros de \wmii{} en tu sistema de ficheros,
    aunque tiene el inconveniente de necesitar de permisos de \emph{root}.

    \subsection{Herramientas}

    Esta sección proporciona una vista rápida acerca de las herramientas
    que se distribuyen con \wmii. Pero para una descripción más detallada,
    deberías leer las páginas de manual que describen cada herramientas específica.
    
    \begin{description}
      
    \item
      \emph{wmiir} es una pequeña herramienta que se usa para acceder al sistema
      de ficheros virtual de \wmii{} de forma remota. Básicamente proporciona las
      cuatro operaciones tradicionales sobre ficheros:
 
      \begin{itemize*}
      \item read
      \item write
      \item remove
      \item create
      \end{itemize*}

      wmiir necesita saber la dirección donde se sirve el sistema de ficheros
      para acceder a este. Durante el arranque, \wmii{} exporta la variable
      de entorno \verb+WMII_ADDRESS+, que apunta a a esta dirección.
      Esta dirección puede ser:
      \begin{itemize*}
      \item la dirección de un socket unix local como \verb+unix!/ruta/al/socket+ 
      \item la dirección de un socket tcp como \verb+tcp!maquina:puerto+ 
      \end{itemize*}
      
      Si tu quieres trabajar con un sistema de ficheros diferente, puedes especificarlo
      manualmente con la opción de linea de comandos \emph{-a dirección}.
      Por ejemplo con una invocación como:
      \begin{verbatim}
        wmiir read /
      \end{verbatim}
      Este comando realmente muestra los contenidos del directorio raiz del
      sistema de ficheros de \wmii.

    \item
      \emph{wmiimenu} es un menu genérico controlado por el teclado, que selecciona
      los elementos realizando pattern matching a medida que se escribe.
      Puedes aprender más sobre este leyendo la página de manual.

    \item
      \emph{wmiiwarp} es una pequeña herramienta para transladar el puntero del
      ratón a unas coordenadas específicas de tu pantalla.

    \item
      \emph{wmiiwm} es el binario principal del gestor de ventanas. Puedes interactuar
      con el a traves de su sistema de ficheros.

    \item
      \emph{wmiipsel} muestra por la salida estandar el contenido de la actual
      selección de X11. Es útil al escribir scripts. 

    \end{description}

    \subsection{Conclusion}

    El sistema de ficheros virtual de \wmii{} y las herramientas que se han presentado
    permiten controlar completamente el gestor de ventanas por medio de scripts.
    En la próxima sección verás algunos ejemplos.
    \ref{sec:scripting}.

    \section{Scripting wmii}
    \label{sec:scripting}

    En esta sección verás como controlar \wmii{} a traves de scripts. Te mostraré
    algunos ejemplos, para que puedas comenzar a realizar scripts por ti mismo.

    \subsection{Lenguaje}

    Como se ha dicho antes, el único requisito para interactuar con \wmii{} is
    acceder a su sistema de ficheros. La forma más sencilla, es utilizando la
    herramienta wmiir. Por tanto los shell scripts son la forma más sencilla de 
    adaptar \wmii{} para ajustarlo a tus necesidades.

    Por tanto, puedes controlar \wmii{} desde el lenguaje de programación
    que quieras. Sin embargo, los scripts distribuidos con \wmii{} están escritos
    con un subconjunto de ``sh'' que cumple el estandar POSIX, para mantener
    \wmii{} tan portable como sea posible.
    
    Para mantener la simplicidad, los siguientes ejemplos también utilizan ``sh'',
    y no dependen de python, tcl, ruby, \dots

    % - who doesn't have a shell?, extra! we're giving them for free this week

    \subsection{Acciones}

    En \wmii{} puedes agrupar ciertas tareas en \emph{acciones}. Las acciones
    no son más que sencillos scripts que se encuentran en tu directorio local
    o en el directorio de configuración global\wmii{}~\footnote{
	    \texttt{\$CONFPREFIX} se asigna en \emph{config.mk} y que por defecto
	    apunta a \texttt{/usr/local/etc} o \texttt{\$HOME/.wmii-3}.
    }.
    Presionando \emph{MOD-a} puedes abrir el menu de acciones. Es parecido
    al programa menu, pero únicamente presenta acciones a lanzar. 
    
    Podrias querer añadir tus propias acciones escribiendo shell scripts bajo
    el directorio global de configuración de \wmii{} o en \texttt{\$HOME/.wmii-3}.
    
    Esto funciona porque el script que se encarga de lanzar \wmii{} exporta la variable \verb+$PATH+ como \\ 
    	\verb+PATH=~/.wmii-3:$CONFPREFIX/wmii:$PATH+
    	antes de lanzar wmiiwm,
    de esta forma las acciones de usuario locales bajo \verb+~/.wmii-3/+
    tiene preferencia sobre las acciones por defecto de \verb+$CONFPREFIX/wmii+.
    
    Puedes editar este fichero al vuelo, lo que significa que no necestias
    parar \wmii{} antes de editar. Al terminar de editar, simplemente
    tienes que ejecutar wmiirc y los cambios se aplicarán inmediatamente.
    Para hacerlo, simplemente abre el menu de acciones (presionando
    \emph{MOD-a}) y elige la acción \emph{wmiirc}. También puedes ejecutar
    las acciones directamente desde una terminal, debido a que la variable
    \verb+PATH+ modifica y exporta desde el script de arranque de \wmii{}.

    \subsection{wmiirc}
    
    \emph{wmiirc} es un script de ``sh'' especial que se ejecuta al arrancar
    \wmii{} para configurar y controllar \wmii{}.

    Su tarea consiste en escribir datos en varios ficheros del sistema virtual
    de \wmii{}, y la lectura de eventos que \wmii{} genera durante su ejecución.
    Los eventos son en su mayoria combinaciones de teclado, clicks de raton o
    eventos definidos por el usuario.
    Los eventos se procesan en un bucle de gestión de eventos en el script.
    
    Por tanto, para la configuración básica de \wmii{}, como cambiar la
    tecla modificadora por defecto \emph{MOD=Mod1} or las teclas de navegación
    este script es el lugar donde comenzar.
    
    El nombre \emph{wmiirc} significa \wmii{} \emph{run command}, ya que
    ``rc'' es una antigua abreviatura del mundo Unix de ``run command''.

    \subsection{Modificando el estilo}

    El estilo de \wmii-3 se define a traves de los valores de fuentes y colores usados,
    que son exportados por las siguientes \emph{variables de entorno}:

    \begin{verbatim}
      WMII_SELCOLORS='#000000 #eaffff #8888cc'
      WMII_NORMCOLORS='#000000 #ffffea #bdb76b'
      WMII_FONT=static
    \end{verbatim}

    \verb+WMII_SELCOLORS+ define los colores del título y bordes de la ventana 
    del cliente seleccionado, mientras que \verb+WMII_NORMCOLORS+ define
    los colores de todos los clientes no seleccionados. Los números son tuplas
    de valores hexadecimales rgb, que quizas conozcas de HTML. Puedes obtenerlos
    con la herramienta de selección de color del Gimp, por ejemplo.
    
    El primer color define el color del texto de las cadenas en barras y menus.
    El segundo color define el fondo de las barras y clientes, y
    el tercer color define los colores de los bordes de 1px que delimitan barras y clientes.

    \verb+WMII_FONT+ define la fuente que debería utilizarse para mostrar el texto
    en los títulos de las barras, la barra de estado y en wmiimenu.
    Puedes consultar las fuentes disponibles utilizando \emph{xfontsel} por ejemplo.

    \subsection{Llenando la barra de estado}
    \label{subsec:status}
    
    La barra de estado de \wmii{} tiene su propio directorio \verb+/bar+ con
    un subdirectorio para cada una de las etiquetas creadas. Asi que mientras
    editaba este documento mi barra de estado tenia esta pinta:

    \begin{verbatim}
      $ wmiir read /bar
      d-r-x------ salva salva     0 Mon Apr 17 14:19:51 2006 1
      d-r-x------ salva salva     0 Mon Apr 17 14:19:51 2006 2
      d-r-x------ salva salva     0 Mon Apr 17 14:19:51 2006 status
    \end{verbatim}
    
    De la misma forma, cada uno de los subdirectorios contiene dos ficheros,

    \begin{verbatim}
      $ wmiir read /bar/status
      --rw------- salva salva    23 Mon Apr 17 14:22:14 2006 colors
      --rw------- salva salva    23 Mon Apr 17 14:22:14 2006 data
    \end{verbatim}


    El primer fichero contiene las definiciones de clor que controlan la
    apariencia de la barra, mientras que del segundo se obtienen los
    datos (texto) a mostrar.
    
    Ahora puedes comenzar tus propios experimentos creando una nueva
    etiqueta, y investigar y modificarla por medio de leer y escribir valores
    a sus ficheros \verb+colors+ y \verb+data+. Una característica interesante
    de la barra (y los clientes) es que  estos generan eventos correspondientes
    a los clicks del ratón sobre ellas. Puedes abrir una terminal y lanzar
    \verb+wmiir read /event+ para ver como se generan los eventos cuando
    presionas sobre la barra. Este es un mecanismo que permite controlar
    las aplicaciones (y clientes) desde la barra de estado. Si has terminado
    y quieres eliminar una etiqueta, ejecuta el comando:
    \verb+wmiir remove /bar/foo+.
    
    
    Si quieres aprender más, echa un vistazo a el script status,
    que se encarga de presentar la información en la barra de estado
    y visita \hrefx{http://wmii.de} para otros buenos ejemplos, como los siguientes:

     \begin{itemize*}
    \item \emph{status}: monitorizar la bateria restante, temperatura, \dots en portátiles
    \item \emph{status-mpd}: controlar el demonio mpd
    \item \emph{status-load}: mostrar la carga del sistema
    \item \emph{status-net}: monitorizar la señal de la red inalámbrica.
    \end{itemize*}
    
    Ahora are el script de status y intenta comprender por ti mismo,
    como funciona \verbatiminput{../rc/status}. La primera línea es
    una declaración de la función \verb+xwrite+, para simplificar
    las escrituras que se realizan en el script. Las siguientes tres líneas
    se encargar de crear y poner a punto la etiqueta \verb+status+.
    La última sección es un bucle \verb+while+ que \emph{intenta}
    actualizar la carga y la fecha presentadas en la barra.\\
    
    La clave de esto, es que lo \emph{intenta}. Qué podria hacer que
    la escritura fallara? Si \verb+xwrite+ intentara escribir sobre una
    etiqueta inexistente (eliminada), entonces fallaría, por tanto la
    condición del bucle sería falsa, y el script de estado terminaría de
    forma limpia, lo que tiene sentido ya que nadie quiere un programa
    que actualize una etiqueta inexistente.\\
    
    Ahora podemos volver a las primeras líneas del script, y ver
    que hay un \verb+sleep retraso+ entre la eliminación de la etiqueta
    y su creación.
    
    Esto asegura que la \verb+status+ no exisitirá, y por tanto todas
    las escrituras realizadas por cualquier script \verb+status+ anterior
    fallarán, y por tanto estos terminarán. De esta forma podemos asegurarnos
    de que únicamente se ejecuta un script de status en un momento determinado.
    Luego mantenemos una relación uno a uno entre etiquetas y script de estado.
    
    \subsection{Asignando nuevas etiquetas}
    
    Como se ha mencionado antes, puedes conseguir mejores resultados utilizando
    etiquetas, que con las combinaciones de teclas por defecto. Podrias utilizar
    cualquier cadena de texto como etiqueta. O utilizar más de una etiqueta por
    cliente. Para conseguir esto, tienes que separar las etiquetas con un ``+''.

    \begin{verbatim}
      echo -n web+code | wmiir write /view/sel/sel/tags
    \end{verbatim}

    Este comando etiquetaría el actual cliente seleccionado con las etiquetas
    ``web'' y ``code''.
    
    Ahora puedes ver la etiqueta ``web'' ejecutando lo siguiente:

    \begin{verbatim}
      echo -n view web | wmiir write /ctl
    \end{verbatim}

    A medida que se desarrollaba \wmii-3, se hizo más claro que esta acción
    es tan común que necesita su propia combinación de teclas. Por defecto
    \emph{MOD-t} presenta un menu para elegir una vista y
    \emph{MOD-Shift-t} presenta un menu para permitirte asignar nuevas
    etiquetas al cliente seleccionado.

    % TODO:
    % I would also like to put/see a recommended readings or bibliography
    % section this will be of course biased by my use of plumber and acme
    % from p9p but i think it's worth mentioning both them here. similar to:
    % http://wmii.de/contrib/guide-es/beginnersguide/node10.html

    \section{The End}
    \label{sec:end}
    
    Esperamos que esto te ayude a acostumbrarte a \wmii.
    Si has visto algo que crees que está mal, es confuso o falta en este documento
    haznoslo saber:

    La información de contacto se puede encontrar aqui:
    \href{http://wmii.de/index.php/BeginnersGuide}{direct mail},
    \href{http://wmii.de/index.php/MailingList}{[wmii]} mailing-list,
    \href{http://wmii.de/index.php/IRC}{\#wmii} el canal del irc o
    hasta con señales de humo~\footnote{ pero no nos pidas consejo,
    en ese caso apañatelas como puedas \texttt{;-P}.}.

    Also remember that \wmii{} is written by people with taste, so most
    of the decisions made have strong reasons supporting them, so if
    you think something doesn't make sense or doesn't fit into the
    picture, just try to understand it by yourself first before
    asking, probably you'll end up learning a lot and if its really
    wrong in the end, you'll provide us with much better feedback to
    solve the issue.

    \newpage

    \section{Appendix}
    \label{sec:appendix}

    \subsection{filesystem}

    \begin{description}

    \item [/bar]
      \begin{itemize*}
      \item the bar namespace
      \item to add a label, create /bar/\verb+label+ (this automatically creates the
        \verb+colors+ and \verb+data+ files.
      \item to delete it, remove /bar/\verb+label+
      \end{itemize*}

    \item [/bar/label]
      \begin{itemize*}
      \item each bar has it's own namespace which is named according to it's 
        label
      \item label can be any arbitrary string
      \end{itemize*}

    \item [/bar/label/data]
      \begin{itemize*}
      \item the data written to the label \verb+label+
      \end{itemize*}

    \item [/bar/label/colors]
      \begin{itemize*}
      \item the colours of the bar
      \end{itemize*}

    \item [/client]
      \begin{itemize*}
      \item the clients namespace
      \end{itemize*}

    \item [/client/n]
      \begin{itemize*}
      \item every client, including ones not shown in the view has a namespace here
      \item \verb+n+ is a non-negative integer and clients are numbered oldest first
      \end{itemize*}

    \item [/client/n/class]
      \begin{itemize*}
      \item a file containing the class:instance information for client \verb+n+
      \end{itemize*}

    \item [/client/n/ctl]
      \begin{itemize*}
      \item control file for client \verb+n+
      \item accepted commands:
        \begin{itemize*}
        \item kill (removes client)
        \item sendto \verb+area|prev|next|new+
        \item swap \verb+up|down|prev|next+
        \end{itemize*}
      \end{itemize*}

    \item [/client/n/geom]
      \begin{itemize*}
      \item the window geometry of client \verb+n+
      \item displayed as four blank separated integers (x y width height?) 
      \end{itemize*}

    \item [/client/n/index] contains the client's index in the /client namespace, in this case n

    \item [/client/n/name]
      \begin{itemize*}
      \item the name of client \verb+n+ as it's seen by \wmii{} (displayed in the tagbar)
      \end{itemize*}

    \item [/client/n/tags]
      \begin{itemize*}
      \item a plus(+)-separated list of tags to which client \verb+n+ is related 
      \end{itemize*}

    \item [/ctl]
      \begin{itemize*}
      \item the \wmii{} control file and command interface
      \item accepted commands:
        \begin{itemize*}
        \item quit
        \item retag
        \item view \verb+tag+
        \end{itemize*}
      \end{itemize*}

    \item [/def]
    \item [/def/border] width of the border around clients
    \item [/def/font] the font used by \wmii{} (an xlib font name)
    \item [/def/keys] a newline separated list of the keys to be grabbed by \wmii
    \item [/def/rules] 
      \begin{itemize*}
      \item a newline separated list of rules to specify how to automatically tag clients
      \item matches against the class.instance values of a client
      \item syntax: \verb+/$regex/ -> $tag+ (tag might be \~{} to indicate floating mode
      \end{itemize*}
    \item [/def/colwidth] with of newly created columns (in px)
    \item [/def/colmode] mode of newly created columns


    \item [/view]
      \begin{itemize*}
      \item a manifestation of the collection of clients associated with a specific
        tag
      \end{itemize*}

    \item [/view/area]
      \begin{itemize*}
      \item each area has its own namespace in the current view
      \item the areas are numbered starting with 0
      \item 0 is always the floating area, the others are columns
      \end{itemize*}

    \item [/view/area/ctl]
      \begin{itemize*}
      \item accepted commands:
        \begin{itemize*}
        \item select \verb+client|prev|next+
        \item client refers to the client number relative to the number and
          age of the clients in \verb+area+
        \end{itemize*}
      \end{itemize*}

    \item [/view/area/mode] the current layout for the area, equal, stack or max
    \item [/view/area/sel] the selected client of the area
    \item [/view/area/client] the namespace for each client in \verb+area+
    \item [/view/ctl] accepted commands: select \verb+area|prev|next|toggle+
    \item [/view/sel] the selected area in workspace
    \item [/view/tag] the tag which is common to all clients in the workspace

    \end{description}

    \newpage

    \subsection{keybindings}
    Here are the default keybindings. \verb+$MODKEY+ is a placeholder, which is
    usually mapped to Mod1 or Alt.
    \begin{table}[h]
      \begin{tabular}{|l|l|}
        \hline % Puts in a horizontal line 
        Keybinding &Action \\ %Table Headers , columns separated by &,
        %rows ended by \\
        \hline 
        \hline 
        Moving Focus&\\
        \verb+$MODKEY+-h&move focus to prev column \\
        \verb+$MODKEY+-l&move focus to next column \\
        \verb+$MODKEY+-j&move focus to next client in column \\
        \verb+$MODKEY+-k&move focus to prev client in column \\
        \verb+$MODKEY+-space&toggle to/from floating column 0 \\
        \verb+$MODKEY+-[0-9]&select tag/view [0-9] \\
        Moving Clients&\\
        \verb+$MODKEY+-Control-h&swap client with last client of prev column \\
        \verb+$MODKEY+-Control-l&swap client with last client of next column \\
        \verb+$MODKEY+-Control-j&swap client down in the column \\
        \verb+$MODKEY+-Control-k&swap client up in the column \\
        \verb+$MODKEY+-Shift-h&send client to prev column \\
        \verb+$MODKEY+-Shift-l&send client to next column \\
        \verb+$MODKEY+-Shift-space&send client to/from floating column 0 \\
        \verb+$MODKEY+-Shift-[0-9]&send client to tag/view [0-9] \\
        Layouts&\\
        \verb+$MODKEY+-d&select default layout \\
        \verb+$MODKEY+-s&select stacked layout \\
        \verb+$MODKEY+-m&select max layout \\
        Menu Bar Functions&\\
        \verb+$MODKEY+-a&choose action from menu bar \\
        \verb+$MODKEY+-p&choose program from menu bar \\
        \verb+$MODKEY+-t&choose view from menu bar \\
        \verb+$MODKEY+-Shift-t&assign tag(s)  to client from menu bar \\
        Clients and Applications&\\
        \verb+$MODKEY+-Return&open terminal client \\
        \verb+$MODKEY+-Shift-c&kill client \\
        \hline 
      \end{tabular} 
      \caption{Default keybindings of \wmii} 
    \end{table}

    \newpage

    \section{Credits}
    \label{sec:credits}


    \begin{description}
    \item [Author] Steffen Liebergeld
    \item [Main critic and inquisitor] Salvador Peir\'o

    \item [Helpers]
      Anselm Garbe \\
      Denis Grelich \\
      Ross Mohn \\
      Neptun Florin \\
      Jochen Schwartz \\
      Adrian Ratnapala \\
    \end{description}

    \section{Copyright notice}

    guide to wmii-3\\
    Copyright (C) 2005, 2006 by Steffen Liebergeld, Salva Peir\'o

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, version 2

    This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.

\end{document}
