%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[latin1]{inputenc}
\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={A Guide to 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 \\\\
\small{con l'aiuto di}\\
Salvador\\Peir\'o
}

\title{Guida a wmii-3%
\thanks{Grazie a tutta la comunit\`a di wmii, in particolare tutte le 
persone citate in \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{Introduzione}

  \subsection{Scopo del documento}

    Questa guida vuole essere un buon punto di partenza per i neofiti
    di \wmii-3. Coloro che hanno gi\`a usato wmi, \wmii-2.5 o anche
    ion avranno modo di apprezzare le novit\`a e le differenze di
    \wmii-3. Chi invece non ha mai utilizzato un window manager a
    schede si innamorer\'a di questo nuovo sistema.
  
  \subsection{wmii---la seconda generazione del window manager improved}

    \wmii-3 \`e un nuovo tipo di window manager. \`E progettato per
    utilizzare poca memoria, per essere modularizzato all'estremo e
    per essere scritto con il minor numero possibile di righe di
    codice, garantendo cosa il minor numero possibile di bug. Infatti,
    uno dei nostri scopi ufficiali \`e quello di non superare le $10
    k$ righe di codice~\footnote{ un beneficio di questo limite \`e
    che il codice \`e pi\`u facile da leggere e comprendere, e di
    conseguenza da usare e conoscere bene}.

    \wmii{} vuole essere facilmente portabile attraverso le
    piattaforme, dando cos\`i massima libert\`a all'utente.

    \wmii-3 \`e la terza major release della seconda generazione del
    window manager improved~\footnote{ le due ii stanno infatti per il
    numero romano 2.}. Con la versione 2.5 di \wmii{} \`e stato
    introdotto per la prima volta il concetto di window manager
    dinamico, tale da superare le limitazioni del paradigma WIMP (vedi
    anche \emph{wmii.tex}).
  
  \subsection{A chi \'e rivolta questa guida}

    Daremo per scontato che il lettore abbia gi\`a una certa
    esperienza di Unix, ne conosca la terminologia base e i concetti
    di file e di editor.

    Ci auguriamo che siate aperti a nuove idee, e che siate disponibili a
    investire un po' di tempo a imparare \wmii-3~\footnote{ ricordate
    l'adagio: ``nessuno ti pu\`o insegnare quello che non vuoi
    imparare''.}.

    Se volete solo sapere come usare \wmii-3 e non siete interessati
    al suo funzionamento interno o allo scripting, potete limitarvi a
    leggere le sezioni \ref{sec:conf&install},
    \ref{sec:terms}, la sottosezione \ref{sec:firststeps} e
    saltare il resto.

    Ad ogni modo, per ottenere il massimo da \wmii-3 dovreste leggere
    l'intero documento in maniera ``sequenziale'', dall'inizio alla
    fine. Un'altra possiiblit\'a \`e quella di leggere/usare la guida
    ``on demand'', man mano che vi rendete conto di aver bisogno di
    maggiori informazioni o volete capire meglio alcuni
    concetti. Raccomandiamo di leggere prima i capitoli introduttivi,
    per prendere confidenza con il mondo di \wmii, e leggere i capitoli
    sullo scriting in un secondo momento.
    
    \section{Configurazione e installazione}
    \label{sec:conf&install}

    \subsection{Ottenere wmii}

    \wmii \`e rilasciato sotto licenza MIT/X Consortium License,
    quindi fondamentalmente si tratta di software libero, che potete
    scaricare gratuitamente da \hrefx{http://wmii.de}~\footnote{ vedi
    \hrefx{http://wmii.de/repos/wmii/LICENSE} per i dettagli}.
    
    \subsection{Configurazione e installazione}
    
    Prima di tutto, controllate che non esistano pacchetti binari di
    \wmii{} per la vostra distribuzione. Debian, Ubuntu e Gentoo
    dovrebbero avere gi\'a dei pacchetti pronti. Se avete a
    disposizione dei pacchetti di cui vi fidate, potete saltare
    tranquillamente alla prossima sezione.
    
    Per tutti quelli che stanno ancora leggendo, sappiate che siete
    comunque avvantaggiati, perch\'e compilando voi stessi i sorgenti,
    avrete tutti i file nelle posizioni originali, il che render\`a
    pi\`u facile l'utilizzo di \wmii.
    
    \begin{enumerate}
      
    \item Per disinstallare una versione precedente:
      \begin{verbatim}
        cd /percoroso/per/wmii-vecchio
        make uninstall && make clean 
      \end{verbatim}

      Nel caso in cui stiate installando una nuova versione di \wmii,
      questa \`e la prima cosa da fare, o finirete per mescolare
      versioni potenzialmente incompatibili dei file binari, dei file
      di configurazione e delle pagine di manuale.

    \item Scompattate i sorgenti:
      \begin{verbatim}
        tar xzf wmii-3.tar.gz
        cd wmii-3
      \end{verbatim}
      
    \item Modificate la configurazione:
      \begin{verbatim}
        vim config.mk
      \end{verbatim}
      
      La variabile pi\`u importante da valorizzare \`e \verb+PREFIX+
      che imposta la directory di installazione di \wmii-3. In caso di
      dubbio, lasciate il valore di default, non farete alcun danno al sistema.
      
    \item Eseguite make e make install:
      \begin{verbatim}
        make && make install
      \end{verbatim}
      
    \item Configurate X-server per eseguire \wmii{} come window
      manager predefinito. Potete farlo editando il file \emph{\~{}/.xinitrc}.

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

      % Not necessary, .xinitrc is sourced by xinit anyways
      %
      %    Make sure that the \emph{\~{}/.xinitrc} is executable:
      %
      %    \begin{verbatim}
      %      chmod u+x ~/.xinitrc
      %    \end{verbatim}

    \end{enumerate}
    
    Avete finito. Notate come gli autoconf tools non siano usati, per
    varie ragioni~\footnote{ leggete
      \hrefx{http://www.ohse.de/uwe/articles/aal.html} e
      \hrefx{http://lists.cse.psu.edu/archives/9fans/2003-November/029714.html}
      per ulteriori dettagli}. Non chiedete agli sviluppatori di
    \wmii{} di usare autoconf, non sarete ascoltati.


    \section{Terminologia}
    \label{sec:terms}  

    Prima che muoviate i vostri primi passi in \wmii, \`e necessario
    chiarire alcuni termini.

    \subsection{Client}

    Un client \`e un programma che vi presenta una interfaccia grafica
    per un utilizzo particolare, ad esempio un browser web o un terminale.

    \subsection{Focus}

    Il client che ha il focus \`e il client che riceve un vostro
    input. In X11 solo un client per volta pu\`o ricevere l'input. Se
    inserite dei comandi al terminale, la finestra che contiene detto
    terminale ha il focus, mentre tutte le altre finestre non ricevono
    l'input da voi inserito.
    
    \subsection{Eventi}

    Un evento \`e un messaggio generato dal server X per segnalare ai
    client X degli stati precisi. Ad esempio, il server X genera un
    evento di pressione pulsante se fate click in una finestra.
    
    \subsection{Tag}

    Un tag (o etichetta) \`e una stringa alfanumerica che potete
    associare ai client, e che vi permette di raggruppare i client in
    modo naturale.

    In \wmii non ci sono pi\`u workspace. Al loro posto, vengono
    visualizzati tutti i client che hanno un certo tag. Per esempio,
    se etichettate il vostro browser e un terminale con il tag
    ``web-browser'', e fate richiesta di visualizzare tutti i client
    che contengono questo tag, \wmii{} mostrer\`a a video il browser e il
    terminale.
    \`E anche possibile assegnare ai client pi\`u di un tag, come
    descritto pi\`u avanti.
    
    \subsection{Viste}

    Una vista (o \emph{view}) \`e un gruppo di client che contengono
    un tag specifico e sono visualizzati. Una vista \`e abbastanza
    simile alla metafora del ``workspace'' in altri window manager, ma
    \`e pi\`u potente. 
    
    Pu\`o essere visibile solo una vista per volta. 

    Le viste sono in relazione con i tag che sono in uso in un dato
    momento. Esiste esattamente una vista per ogni singolo tag, quindi
    potete visualizzare solo gruppi di client che hanno un tag
    esistente.

    Se eliminate l'ultimo client con un dato tag, la vista relativa a
    questo tag \`e distrutta.

    \subsection{Colonne}

    Una colonna \`e una parte di una vista in cui i client sono
    disposti automaticamente in direzione verticale.

    In \wmii \`e possibile suddividere ogni vista in pi\`u
    colonne. Ogni colonna contiene almeno un client, quindi non appena
    chiudete l'ultimo client di una colonna, questa viene
    automaticamente eliminata.

    % no, una vista pu\`o contenere anche solo dei client fluttuanti.
    % ogni vista ha quindi almeno una colonna o una finestra
    % fluttuante.

    \subsection{Layout}

    Un layout \`e la disposizione dei client in una colonna. Ci sono
    tre modi diversi per disporre i client.

    \paragraph{default} Questo layout divide lo spazio in parti uguali
    tra tutti i client di una colonna.
    \paragraph{massimizzato} Questo layout assegna a tutti i client le
    stesse dimensioni della colonna, mostrando un solo client per volta.
    \paragraph{stack} Questo layout dispone i client uno sopra
    l'altro, rendendo visibile solo quello con il focus, mentre gli
    altri sono accessibili tramite la barra del titolo. Si tratta di
    un approcico alternativo alla disposizione a \emph{schede} (o
    \emph{tabbing}).

    \section{Come iniziare}

    Ora possiamo tuffarci nell'esperienza di \wmii{}. Vi suggerisco di
    provare immediatamente ogni procedura descritta anzich\'e leggere
    tutto d'un fiato, cos\`i da evitare ``perdite di
    memoria''. Sarebbe utile stampare questo documento o tenerlo a
    disposizione su uno schermo diverso, perch\'e potreste non essere
    in grado di raggiungerlo durante i vostri primi passi con \wmii.

    Nota bene: il tasto \emph{MOD} a cui si fa riferimento pu\`o
    rappresentare cose diverse su sistemi diversi. Di default in X11 \`e il
    tasto \emph{Mod1} o \emph{Alt}. Di norma \`e segnato come
    \emph{Alt} sulla tastiera.

    La notazione \emph{MOD}-\emph{tasto} significa che bisogna
    premenre \emph{MOD} e il tasto \emph{tasto} allo stesso tempo.

    Si possono configurare liberamente tutte le combinazioni di tasti,
    ma per semplicit\`a ci limiteremo in questa guida alle
    combinazioni predefinite. Vedrete come cambiare le impostazioni di
    dafault nella sezione \ref{sec:scripting}.

    Le combinazioni di default usano parecchio i tasti
    \emph{h} (sinistra), \emph{j} (gi\`u), \emph{k} (su), and \emph{l} (destra),
    associate alle relative direzioni.

    \subsection{Primi passi}
    \label{subsec:firststeps}

    Avviate ora l'interfaccia grafica di X. Dal momento che \`e la
    prima volta che usate \wmii, vedrete una finestra con un breve
    tutorial. Siete liberi di leggerlo, ma potreste anche seguire
    questa guida :-)

    Prima di tutto, premete \emph{MOD-Invio} per avviare un
    xterm. Quest'ultimo occuper\`a met\`a dello spazio verticale,
    cos\`i che avrete due finestre equamente distribuite nello
    schermo. Se premete \emph{MOD-Invio} ancora una volta, vedrete tre
    finestre equamente disposte.

    Per passare da una finestra all'altra, premete \emph{MOD-j}, che
    assegna il focus via via alle tre finestre.

    Potete anche premere \emph{MOD-k} per passare alla finestra sopra
    o \emph{MOD-j} per passare alla finestra sotto quella con il focus.

    Ora osservate le barre del titolo delle tre finestre. Mostrano
    delle informazioni importanti: la prima parte contiene il tag
    della finestra; la seconda il titolo della stessa.

    Informazioni analoghe vengono mostrate nella barra di stato al
    fondo dello schermo. Le prime etichette mostrano i tag in uso, con
    in evidenza la vista corrente. Sul lato destro ci sono delle
    informazioni sullo stato del sistema: di default l'ora corrente e
    il carico di cpu (vedi la sottosezione~\ref{subsec:status} per
    maggiori dettagli).

    \subsection{Usare le colonne}

    Come descritto prima, \wmii{} usa delle colonne per disporre le
    finestre. La vista corrente consiste gi\'a di una singola
    colonna. Ora creerete una nuova colonna.

    In \wmii le colonne consistono sempre di almeno un client, quindi
    per creare una nuova colonna dovete avere almeno due client a
    disposizione.

    Selezionate un client a scelta e premete \emph{MOD-Shift-l}, che
    sposta il client verso destra. Come vedete, \wmii{} crea una nuova
    colonna dividendo la vista orizzontalmente in due aree della
    stessa dimensione. Il client selezionato \`e stato spostato nella
    nuova colonna.

    Se chiudete l'ultimo client di una colonna, questa \`e
    immediatamente distrutta. Se chiudete l'ultimo client della vista
    corrente, anche la vista \`e distrutta.

    Se premete \emph{MOD-j} per cambiare il focus, vedrete che \wmii
    cambia effettivamente il focus solo all'interno della colonna.

    Per spostare il focus in un'altra colonna, potete premere rispettivamente
    \emph{MOD-l} (destra) e \emph{MOD-h} (sinistra).

    \`E anche possibile scambiare di colonna client adiacenti. Per
    scambiare un client verso sinistra, premete
    \emph{MOD-Control-h}. Per effettuare uno scambio verso destra,
    premete \emph{MOD-Control-l}.

    \subsection{E i layout?}

    I layout dispongono i client in una colonna, sono quindi relativi
    ad una singola colonna per volta. In questo modo \`e possibile
    avere pi\`u di una colonna per vista, ognuna con un layout
    differente.

    Il layout di default dispone ogni client di una colonna dividendo
    equamente lo spazio. Potete abilitare esplicitamente questo layout
    premendo \emph{MOD-d} (dove ``d'' sta pre default).

    Il layout a stack (pila) pu\`o essere abilitato con
    \emph{MOD-s}. Come potete vedere, ora un solo client occupa pi\`u
    spazio che pu\`o, mentre gli altri sono visibili solo attraverso
    la barra del titolo.. Potete passare da un client all'altro
    premendo \emph{MOD-j}.

    Il layout massimizzato \emph{MOD-m} assegna ai client le stesse dimensioni
    della colonna. \`E quindi visibile solo il client con il focus,
    tutti gli altri si trovano al di sotto di quest'ultimo. Potete
    sempre passare sa un client all'altro premendo \emph{MOD-j}.

    \subsection{Livello fluttuante}

    Il cosiddetto ``livello fluttuante'' \`e usato per gestire i
    client nella maniera classica, simile a quella dei window manager
    convenzionali. Alcuni client, infatti, non si adattano bene al
    sistema a schede, perch\'e sono stati progettati avendo in mente i
    window manager convenzionali. Un esempio possono essere The Gimp e
    Xmms.

    Anche se \wmii{} \`e un window manager dinamico, che ordina
    automaticamente le finestre, questi programmi vecchio stile si
    appoggiano ad un concetto convenzionale di gestione delle
    finestre, in cui tutti i client fluttuano sul desktop e voi siete
    constantemente impegnati a mettere ordine.
    
    Per assegnare questi client difettosi al livello fluttuante,
    potete alternare il focus tra il livello fluttuante e quello
    gestito automaticamente premendo \emph{MOD-Spazio}. La
    combinazione di tasti \emph{MOD-Shift-Spazio} alterna la finestra
    con il focus tra il livello fluttuante e quello automatico.

    Nota bene: il livello fluttuante \`e identificato internamente
    come colonna zero.

    \subsection{Tag}

    Fino ad ora tutti i client avevano il tag ``1'', ed era
    disponibile un'unica vista. Una sola vista, tuttavia, non \`e
    facilmente gestibile, una volta che si sono aperti diversi client
    che fanno cose diverse. Potreste invece volere una vista per ogni
    ambito, ad esempio una con l'editor e gli strumenti di
    programmazione, una con il browser e una terza con il jukebox
    musicale.

    La buona notizia \`e che il concetto di tag (etichette) fornisce
    un sistema molto dinamico per ottenere questo tipo di
    raggruppamento.

    Potete assegnare un altro tag al client con il focus premendo
    \emph{MOD-Shift-Numero} dove Numero sta per una cifra da 0 a 9.

    Potete passare da una vista all'altra premendo \emph{MOD-Numero}.

    Normalmente, ogni volta che avviate un nuovo client, questo
    eredita il tag della vista corrente.

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

    Nel prossimo capitolo illustreremo modi pi\`u potenti di usare i
    tag. Imparerete ad assegnare tag multipli ad un client e ad usare
    delle stringhe come tag.

    \subsection{Come faccio a chiudere una finestra?}

    La maggior parte dei client di X hanno un'opzione di menu o un
    bottone per la chiusura dell'applicazione. Nei rari casi in cui
    non esistesse una soluzione a portata di mouse, come nella maggior
    parte dei terminali, potete premere \emph{MOD-Shift-c} per
    chiudere una finestra.

    \subsection{Come avvio un programma?}

    Potete farlo da un terminale. Ma \wmii{} possiede un menu dei
    programmi gestito da tastiera, a cui potete accedere premendo
    \emph{MOD-p}. I contenuti di questo menu sono gestiti da un
    semplice shell script.

    Vedrete dunque una lista di programmi. Se iniziate a digitare
    qualcosa, il menu accorcer\`a la lista, mostrando solo le voci che
    corrispondono alle lettere da voi inserite (nell'ordine in cui le
    avete inserite). Ogni volta che rimane una sola voce, il menu la
    evidenzia e voi potete avviare l'applicazione premendo
    \emph{Invio}. Potete annullare l'operazione premendo \emph{Esc}.

    In questo modo, se volete lanciare Firefox, vi baster\`a digitare
    ``fire'' e premere Invio~\footnote{Nel mio sistema \`e sufficiente
    digitare ``efo'' per avviare il browser ;-))}.

    \subsection{Come esco da wmii?}

    Potete uscire da \wmii tramite il menu azione (\emph{MOD-a} e
    selezionando ``quit''. \`E tutto.

    
    \section{Cosa c'\`e sotto il cofano}

    In questo capitolo vedremo come \`e stato progettato \wmii{},
    quali idee sono state seguite dagli sviluppatori e come \`e stato
    implementato.


    \subsection{Window management dinamico}

    \wmii{} \`e stato progettato intorno alla nuova idea di window
    management dinamico (gestione dinamica delle finestre). Questo
    significa che il window manager dovrebbe prendere tutte le
    decisioni circa la posizione delle finestre, togliendo un sacco di
    lavoro all'utente e permettendogli di concentrarsi sul suo
    lavoro. Il tutto pu\`o anche essere inteso come gestione tacita
    delle finestre.

    \subsection{Modularit\`a---strumenti diversi per compiti diversi}

    Gli sviluppatori di \wmii{} conoscono le idee pi\`u potenti che
    stanno alla base di Unix. Una di queste \`e l'idea di usare
    strumenti diversi per compiti diversi. Progettando accuratamente
    il window manager, sono stati in grado di dividere il tutto in
    programmi pi\`u piccoli, ognuno con un compito ben distinto dagli
    altri.

    
    \subsection{Il collante che tiene tutto insieme ---9P}

    I programmi del mondo Unix comunicano, di norma, attraverso dei
    buffer accessibili tramite descrittori (di file), tra cui i
    socket.

    Allo scopo di create un protocollo di comunicazione leggero ma
    potente, gli sviluppatori di \wmii hanno osservato attentamente il
    design di Plan9 e hanno scelto il protocollo 9P.

    Le idee di base per la configurazione ed esecuzione di \wmii{}
    sono state prese dall'interfaccia utente Acme per i programmatori
    di Plan9. Allo stesso modo di Acme, \wmii{} fornisce
    un'interfaccia basata su filesystem, accessibile ai client
    9P. Questo permette l'interazione di qualsiasi tipo di
    applicazione tramite filesystem, implementabile in qualsiasi
    linguaggio di programmazione si voglia. Questo svincola i
    programmatori di client da uno specifico linguaggio o paradigma.

    L'interfaccia di \wmii{} pu\`o essere comparata al fileystem
    \emph{procfs} del kernel Linux.
    
    Se volete interagire con un processo \wmii{} in esecuzione, potete
    accedere al suo filesystem 9P usando lo strumento incluso
    \emph{wmiir} o caricando il modulo 9P2000 per i kernel Linux
    a partire dal 2.4.16. Con il modulo del kernel avrete il vantaggio
    di poter montare il filesystem di \wmii{} direttamente nella
    gerarchia di filesystem principale, ma ha lo svantaggio di
    richiedere privilegi di root.

    \subsection{Strumenti}

    Questa sezione intende fornire una panoramica sugli strumenti
    inclusi in \wmii. Per una descrizione pi\`u dettagliata dovreste
    leggere le relative pagine man.
    
    \begin{description}
      
    \item
      \emph{wmiir} \`e un piccolo strumento usato per accedere al
      filesystem virtuale di \wmii{} da remoto. Fondamentalmente
      supporta le seguenti operazioni:

      \begin{itemize*}
      \item read (leggi)
      \item write (scrivi)
      \item remove (elimina) 
      \item create (crea)
      \end{itemize*}

      wmiir ha bisogno di conoscere l'indirizzo del filesystem con cui
      deve lavorare. All'avvio, \wmii{} esporta la variabile
      d'ambiente \verb+WMII_ADDRESS+ che punta all'indirizzo del
      filesystem service di \wmii.
      Questo pu\`o essere:
      \begin{itemize*}
      \item un unix socket locale, del tipo \verb+unix!/path/to/socket+ 
      \item un indirizzo di socket tcp, del tipo \verb+tcp!hostname:port+ 
      \end{itemize*}
      
      Se avete intenzione di lavorare su un filesystem diverso, potete
      specificarlo manualmente tramite tramite l'opzione \emph{-a
      indirizzo} da riga di comando. 
      Un esempio dell'uso di \emph{wmiir} potrebbe essere:
      \begin{verbatim}
        wmiir read /
      \end{verbatim}
      Questo comando stampa il contenuto della directory root del
      filesystem virtuale di \wmii.

    \item
      \emph{wmiimenu} \`e un menu generico comandato da tastiera, che
      seleziona le voci tramite delle sottostringhe. Potete saperne di
      pi\`u leggendo la pagina man.

    \item
      \emph{wmiiwarp} \`e un minuscolo strumento che sposta il
      puntatore del mouse verso coordinate specifiche dello schermo.

    \item
      \emph{wmiiwm} \`e il programma principale del window
      manager. Potete interagire con esso solo tramite il filesystem virtuale.

    \item
      \emph{wmiipsel} stampa il contenuto della selezione X corrente
      su STDOUT. Utile per gli script.

    \end{description}

    \subsection{Conclusione}

    Il servizio di filesystem virtuale di \wmii{} e gli strumenti qui
    presentati vi permettono di avere il controllo completo del window
    manager anche attraverso degli script. Vedremo degli esempi nella
    prossima sezione \ref{sec:scripting}.

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

    In questo capitolo vedremo come controllare \wmii{} attraverso
    degli script. Vi daremo le indicazioni di base cos\`i che possiate
    procedere autonomamente.

    \subsection{Linguaggio}

    Come gi\`a accennato, l'unico vincolo per interagire con \wmii{}
    \`e la possibilit\`a di accedere al suo filesystem virtuale. Il
    modo pi\`u semplice per farlo \`e tramite il programma
    wmiir. Quindi gli script di shell rappresentano la via pi\`u
    facile per adattare \wmii alle vostre esigenze.
    
    In realt\`a potete controllare \wmii{} in qualsiasi linguaggio di
    programmazione. Ad ogni modo, gli script di default di \wmii sono
    scritti usando un sottoinsieme di ``sh'', quindi in piena
    osservanza POSIX, per rendere \wmii{} pi\`u \emph{portabile} possibile.

    Per semplicit\`a gli esempi seguenti faranno uso anch'essi di
    ``sh'', e non richiederanno la conoscenza di python, tcl, ruby, \ldots

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

    \subsection{Azioni}

    In \wmii{} potete raggruppare certi compiti in \emph{azioni}. Le
    azioni non sono altro che semplici script che si trovano o nella
    directory di configurazione di default di \wmii{}, o nella
    vostra.~\footnote{ \texttt{\$CONFPREFIX} \`e impostato in
    \emph{config.mk} e di default punta a \texttt{/usr/local/etc} o a \texttt{\$HOME/.wmii-3}}.

    Premendo \emph{MOD-a} attiverete il menu azione, che funziona in
    modo simile al menu programmi, ma mostra solo le azioni
    disponibili.

    Se volete aggiungere le vostre azioni, potete inserire i vostri
    shell script nella directory di configurazione di default o in
    \texttt{\$HOME/.wmii-3}.
    
    Il tutto funziona perch\'e lo script di controllo di \wmii{}
    esporta la variabile \verb+PATH+ come
    \verb+PATH=~/.wmii-3:\$CONFPREFIX/wmii:\$PATH+ prima di eseguire
    wmiiwm. In questo modo le azioni locali che si trovano in
    \verb+~/.wmii-3+ hanno la precedenza su quelle di default che si
    trovano in \verb+\$CONFPREFIX/wmii+.

    Potete modificare al volo questo file, non \`e necessario fermare
    \wmii{}. Una volta finito, vi baster\`a eseguire wmiirc e i
    cambiamenti saranno di effetto immediato. Per fare questo, aprite
    il menu azione (premendo \emph{MOD-a} e scegliete
    \emph{wmiirc}. \`E anche possibile eseguire azioni di \wmii{} da
    un terminale, utile effetto collaterale dell'esportazione della
    variabile \verb+\$PATH+ nello script di avvio di \wmii{}.

    \subsection{wmiirc}
    
    Si tratta di uno speciale script in ``sh'' che viene eseguito
    all'avvio di \wmii{} per la configurazione e il controllo dello
    stesso.

    Per ottenere questo effetto scrive diversi file nel filesystem
    virtuale di \wmii e legge gli eventi segnalati da \wmii{} durante
    l'esecuzione. Gli eventi consistono soprattutto di combinazioni da
    tastiera, click del mouse o definiti dall'utente. Gli eventi sono
    gestiti da un'iterazione nello script.

    Cos\`i per una configurazione base di \wmii, come ad esempio
    cambiare il tasto \emph{Mod1} o i tasti di navigazione, vi potete
    rivolgere a questo script.
    
    Il nome \emph{wmiirc} significa \wmii{} \emph{run command},
    perch\'e ``rc'' \`e una vecchia abbreviazione Unix di ``run command''.

    \subsection{Cambiare lo stile}

    Lo stile di \wmii-3 \`e definito attraverso font e colori,
    esportati tramite le seguenti \emph{variabili d'ambiente}.

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

    \verb+WMII_SELCOLORS+ definisce i colori del bordo e della barra
    del titolo della finestra attiva, \verb+WMII_NORMCOLORS+ definisce
    i colori del bordo e della barra del titolo dei client non
    selezionati. I numeri sono valori rgb in esadecimale, come forse
    avete gi\`a visto nel linguaggio HTML. Potete selezionarli, ad
    esempio, tramite il selettore di colore di Gimp.

    Il primo valore definisce il colore del testo delle stringhe nelle
    barre e nei menu. Il secondo valore definisce il colore di sfondo
    delle barre e dei titoli dei client, mentre il terzo definisce il
    colore del bordo di 1px che circonda le barre e i client.

    \verb+WMII_FONT+ definisce il font che deve essere usato per
    visualizzare il testo nelle barre del titolo, nella barra di stato
    e nei menu.

    Potete visualizzare i vari font usando, ad esempio, \emph{xfontsel}. 

    \subsection{Usare la barra di stato}
    \label{subsec:status}
    
    La barra di stato in \wmii{} ha la propria directory \verb+bar+
    con una sottodirectoru per ogni label (etichetta) che viene creata. Mentre
    editavo questo documento la mia barra di stato aveva questo aspetto:

    \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}
    
    Allo stesso tempo ogni directory contiene due file:

    \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}


    Il primo file contiene le definizioni di colore che controllano il
    modo in cui la barra \`e disegnata, mentre il secondo contiene i
    dati che vengono mostrati.
    
    Ora potete fare i vostri esperimenti creando una nuova label,
    esplorarla e modificarla leggendo e scrivendo valori diversi nei
    file \verb+colors+ e \verb+data+. Una caratteristica interessante
    della barra (e dei client) \`e che generano eventi che
    corrispondono a click del mouse su di essi. Potete aprire un
    terminale ed eseguire \verb+wmiir read /event+ per vedere come gli
    eventi vengono generati quando fate click sulla barra di stato. Si
    tratta di un meccanismo che permette di controllare le
    applicazioni direttamente dalla barra. Se avete finito e volete
    sbarazzarvi della label, eseguite il comando
    \verb+wmiir remove /bar/foo+.

    Se volete saperne di pi\`u, date un'occhiata allo script di
    status, e visitate \hrefx{http://wmii.de} per altri esempi
    interessanti, come i seguenti:

    \begin{itemize*}
    \item \emph{status}: Tiene sotto controllo il livello della batteria e della temperatura sui portatili
    \item \emph{status-mpd}: Controlla il demone mpd 
    \item \emph{status-load}: Mostra il carico della cpu
    \item \emph{status-net}: Controlla il segnale della rete wireless
    \end{itemize*}
    
    Ora, aprite lo script di status di default e cercate di capire
    come funziona: \verbatiminput{../rc/status}. La prima riga
    consiste in una comoda dichiarazione di funzione, \verb+xwrite+,
    che evita un bel po' di inutili ripetizioni in fase di scrittura
    su file. Le tre righe successive creano e inizializzano
    la label di \verb+status+. Infine l'ultima sezione \`e un ciclo
    \verb+while+ che \emph{cerca} di inserire nella barra il carico di
    cpu e la data corrente.\\

    La parte difficile \`e che \emph{cerca} di farlo. Che cosa
    potrebbe impedire allo script di aggiornare la barra? Se
    \verb+xwrite+ cercasse di scrivere in una label che non esiste
    (rimossa), fallirebbe, risolvendo il ciclo e uscendo dallo
    script. La cosa ha senso perch\'e nessuno vuole scrivere su
    una label che non esiste.\\

    Ora torniamo alle prime linee dello script, e notiamo come c'\`e
    uno \verb+sleep delay+ tra la rimozione della label e la sua
    creazione.

    Questo garantisce che la label di \verb+status+ non esiste,
    cos\`i che qualunque altro script di status in esecuzione fallisca
    ed esca. In questo modo siamo sicuri che ci sar\`a sempre solo uno
    script di status in esecuzione, e manteniamo una corrispondenza
    biunivoca tra label e script.
    
    \subsection{Assegnare nuovi tag}
    
    Come accennato prima, \`e possibile ottenere risultati pi\`u
    interessanti con i tag rispetto ai comandi predefiniti da
    tastiera. Ad esempio, potreste voler usare una stringa come tag, o
    usare pi\`u di un tag per client. Per fare questo, dovrete
    separare i tag con un ``+''.

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

    Questo comando assegna al client che ha il focus i tag ``web'' e
    ``code''.

    Ora potete selezionare la vista ``web'' tramite il seguente comando:

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

    Durante lo sviluppo di \wmii-3, divenne chiaro che si tratta di
    un'azione cos\`i comune che \`e stata creata un'apposita
    combinazione di tasti. Di default \emph{MODt} visualizza un menu
    di scelta della vista, mentre \emph{MOD-Shift-t} visualizza un
    menu che permette di assegnare nuovi tag al client selezionato.

    % 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{Fine}
    \label{sec:end}
    
    Ci auguriamo che questa guida vi abbia aiutato a prendere
    confidenza con \wmii. Se avete notato qualcosa di sbagliato,
    confuso o mancante in questo documento, non esitate a scriverci.


    Potete trovare tutte le informazioni per contattarci qui:
    \href{http://wmii.de/index.php/BeginnersGuide}{mail diretta},
    \href{http://wmii.de/index.php/MailingList}{[wmii]} mailing- ist,
    \href{http://wmii.de/index.php/IRC}{\#wmii} canale irc, o anche
    tramite segnali di fumo~\footnote{ ma non chiedeteci aiuto su
    questo, vi dovrete arrangiare da soli \texttt{;-P}.}.

    Ricordate anche che \wmii{} \`e stato scritto da persone di buon
    gusto, quindi la maggior parte delle decisioni che sono state
    prese sono il frutto di ragionamenti approfonditi. Se pensate che
    qualcosa non abbia senso o non si accordi con il quadro generale,
    cercate di capire da soli cosa sta succedendo prima di porre delle
    domande. Probilmente finirete per imparare molte cose, e se alla
    fine dovreste davvero scoprire degli errori potrete fornirci molti
    pi\`u elementi per risolvere il problema.

    \newpage

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

    \subsection{filesystem}

    \begin{description}

    \item [/bar]
      \begin{itemize*}
      \item namespace della barra
      \item per aggiungere una label (etichetta), create /bar/\verb+label+ (che genera in automatico
        i file \verb+colors+ e \verb+data+.
      \item per cancellarla, remove /bar/\verb+label+
      \end{itemize*}

    \item [/bar/label]
      \begin{itemize*}
      \item ogni barra ha il proprio namespace organizzato in base
        alla label
      \item una label pu\`o essere qualsiasi stringa
      \end{itemize*}

    \item [/bar/label/data]
      \begin{itemize*}
      \item i dati presenti nella label \verb+label+
      \end{itemize*}

    \item [/bar/label/colors]
      \begin{itemize*}
      \item i colori della barra
      \end{itemize*}

    \item [/client]
      \begin{itemize*}
      \item il namespace dei client
      \end{itemize*}

    \item [/client/n]
      \begin{itemize*}
      \item Ogni client, inclusi quelli non mostrati nella vista corrente ha un namespace qui
      \item \verb+n+ \`e un intero non negativo, i client sono numerati in ordine dal pi\`u vecchio
      \end{itemize*}

    \item [/client/n/class]
      \begin{itemize*}
      \item un file contenente le informazioni class:instance per il client \verb+n+
      \end{itemize*}

    \item [/client/n/ctl]
      \begin{itemize*}
      \item file di controllo per il client \verb+n+
      \item comandi accettati:
        \begin{itemize*}
        \item kill (elimina il 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 la geometria della finestra del client \verb+n+
      \item consiste in tre interi separati da spazio (x y larghezza altezza?) 
      \end{itemize*}

    \item [/client/n/index] contiene l'indice del client nel namespace /client, in questo caso n

    \item [/client/n/name]
      \begin{itemize*}
      \item il nome del client \verb+n+ cos\`i com'\`e visto da \wmii{} (visualizzato nella tagbar)
      \end{itemize*}

    \item [/client/n/tags]
      \begin{itemize*}
      \item una lista separata dal segno + di tutti i tag applicati al client \verb+n+
      \end{itemize*}

    \item [/ctl]
      \begin{itemize*}
      \item il file di controllo e l'interfaccia di comando di \wmii{}
      \item comandi accettati:
        \begin{itemize*}
        \item quit
        \item retag
        \item view \verb+tag+
        \end{itemize*}
      \end{itemize*}

    \item [/def]
    \item [/def/border] larghezza del bordo attorno ai client
    \item [/def/font] il font usato da by \wmii{} (secondo la specifica xlib)
    \item [/def/keys] una lista separata da newline delle combinazioni intercettate da \wmii
    \item [/def/rules] 
      \begin{itemize*}
      \item una lista separata da newline di regole che specificano come applicare tag automatiche ai client
      \item il confronto \`e fatto con il valore di class.instance del client
      \item sintassi: \verb+/$regex/ -> $tag+ (tag pu\`o essere \~{} per indicare il livello fluttuante)
      \end{itemize*}
    \item [/def/colwidth] larghezza di una nuova colonna (in px)
    \item [/def/colmode] modo di una nuova colonna


    \item [/view]
      \begin{itemize*}
      \item visualizzazione di una collezione di client associati ad un tag specifico
      \end{itemize*}

    \item [/view/area]
      \begin{itemize*}
      \item ogni area ha un proprio namespace nella vista corrente
      \item le aree sono numerate a partire da 0
      \item 0 \`e sempre l'area fluttuante, le altre sono colonne
      \end{itemize*}

    \item [/view/area/ctl]
      \begin{itemize*}
      \item comandi accettati:
        \begin{itemize*}
        \item select \verb+client|prev|next+
        \item client si riferisce al numero di client relativo al numero ed et\`a dei client in \verb+area+
        \end{itemize*}
      \end{itemize*}

    \item [/view/area/mode] il layout corrente dell'area: equal, stack o max
    \item [/view/area/sel] il client selezionato all'interno dell'area
    \item [/view/area/client] il namespace per ogni client in \verb+area+
    \item [/view/ctl] comandi accettati: select \verb+area|prev|next|toggle+
    \item [/view/sel] l'area selezionata nel workspace
    \item [/view/tag] il tag comune a tutti i client nel workspace

    \end{description}

    \newpage

    \subsection{combinazioni di tasti}
    Qui ci sono le combinazioni di default. \verb+$MODKEY+ \`e un
    segnaposto, solitamente corirsponde Mod1 or Alt.
    \begin{table}[h]
      \begin{tabular}{|l|l|}
        \hline % Puts in a horizontal line 
        Combinazione &Azione \\ %Table Headers , columns separated by &,
        %rows ended by \\
        \hline 
        \hline 
        Spostare il Focus&\\
        \verb+$MODKEY+-h&sposta il focus alla colonna precedente \\
        \verb+$MODKEY+-l&sposta il focus alla colonna successiva \\
        \verb+$MODKEY+-j&sposta il focus al prossimo client nella colonna \\
        \verb+$MODKEY+-k&sposta il focus al client precedente nella colonna \\
        \verb+$MODKEY+-space&passa da/alla colonna fluttuante 0 \\
        \verb+$MODKEY+-[0-9]&seleziona il tag/vista [0-9] \\
        Spostare i client&\\
        \verb+$MODKEY+-Control-h&scambia il client con l'ultimo client della colonna precedente\\
        \verb+$MODKEY+-Control-l&scambia il client con l'ultimo client della colonna successiva\\
        \verb+$MODKEY+-Control-j&sposta in basso il client nella colonna \\
        \verb+$MODKEY+-Control-k&sposta in alto il client nella colonna \\
        \verb+$MODKEY+-Shift-h&manda il client alla colonna precedente \\
        \verb+$MODKEY+-Shift-l&manda il client alla colonna successiva \\
        \verb+$MODKEY+-Shift-space&sposta il client a/dalla colonna fluttuante 0 \\
        \verb+$MODKEY+-Shift-[0-9]&manda il client al tag/vista [0-9] \\
        Layout&\\
        \verb+$MODKEY+-d&seleziona il layout di default \\
        \verb+$MODKEY+-s&seleziona il layout a stack (pila) \\
        \verb+$MODKEY+-m&seleziona il layout massimizzato \\
        Funzioni della barra menu&\\
        \verb+$MODKEY+-a&scegli un'azione dalla barra menu \\
        \verb+$MODKEY+-p&scegli un programma dalla barra menu \\
        \verb+$MODKEY+-t&scegli una vista dalla barra menu \\
        \verb+$MODKEY+-Shift-t&assegna uno o pi\`u tag al client dalla barra menu\\
        Client e Applicazioni&\\
        \verb+$MODKEY+-Return&apri un terminale \\
        \verb+$MODKEY+-Shift-c&chiudi il client \\
        \hline 
      \end{tabular} 
      \caption{Combinazioni tasti di default in \wmii} 
    \end{table}

    \newpage

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


    \begin{description}
    \item [Autore] Steffen Liebergeld
    \item [Principale critico e inquisitore] Salvador Peir\'o
    \item [Traduzione italiana] Stefano K. Lee

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

    \section{Copyright}

    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}
