\documentclass[a4paper,11pt,twoside]{article}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{indentfirst}
\usepackage{verbatim}
\usepackage{fancyhdr}
\usepackage{vmargin}
\usepackage{graphicx}
%\usepackage[hypertex]{hyperref}
\usepackage[pdftex,colorlinks=true,linkcolor=red,urlcolor=blue]{hyperref}
\usepackage{lmodern}


%BEGIN LATEX
\FrenchFootnotes
\AddThinSpaceBeforeFootnotes
\setmarginsrb{2.5cm}{1.5cm}{2.5cm}{2cm}{1cm}{1cm}{1cm}{1cm}
%END LATEX

%HEVEA \newstyle{body}{width:800px;padding:1em;font-family:sans-serif;background:\#F9F9FF;}
%HEVEA \newstyle{.section}{margin-top: 8ex; border-bottom:1px solid navy; color:navy;}
%HEVEA \newstyle{.subsection}{margin-top: 5ex; color:navy;}
%HEVEA \newstyle{.subsubsection}{margin-top: 3ex; color:navy;}
%HEVEA \newstyle{.verbatim}{margin:3ex 0 3ex 0;padding:1ex;border:1px dotted black;background:\#E8E6FF;}
%HEVEA \newstyle{a}{text-decoration:none;color:blue;}
%HEVEA \newstyle{a:visited}{text-decoration:none;color:purple;}
%HEVEA \newstyle{a:hover}{text-decoration:none;color:red;}


\newcommand{\version}{0.2}
\newcommand{\ion}{\textsf{Ion}}
\newcommand{\iondeux}{\textsf{Ion2}}
\newcommand{\iontrois}{\textsf{Ion3}}
\newcommand{\lua}{\textsf{Lua}}

%HEVEA \renewcommand{\textsf}{\texttt}

\newenvironment{code}%
{\quote \small \verbatim }%
{\endverbatim \normalsize \endquote}

%HEVEA \renewenvironment{code}{\small \verbatim}{\endverbatim \normalsize}

\title{Introduction à \iontrois}
\author{Julien Barnier}
\date{Version \version{} \\ \today{}}

\begin{document}

\sloppy

\maketitle
\thispagestyle{empty}

\newpage

\pagestyle{fancy}
\lhead[\textit{\thepage}]{\textit{Version \version}}
\rhead[\textit{Introduction à \iontrois}]{\textit{\thepage}}
\cfoot{\textbf{}}


\tableofcontents

\newpage


\setlength{\parskip}{1.5ex}

\section{Introduction}

 
\ion{} est un gestionnaire de fenêtres développé par Tuomo Valkonen.
La définition qu'en donne son auteur est~: \textit{\flqq~Ion is a tiling
  tabbed window manager designed with keyboard users in mind~\frqq},
soit, pour tenter une traduction approximative, \textit{\flqq~Ion est un
  gestionnaire de fenêtres en mosaïque et à onglets, conçu pour ceux
  qui préfèrent utiliser le clavier~\frqq}.

Il a pour principal caractéristique une très grande légèreté, une
esthétique sommaire mais une utilisation très efficace. Le site
officiel de \ion{} se trouve à l'adresse
\url{http://iki.fi/tuomov/ion/}.

La dernière version stable est la version 2, dite \iondeux, et la version
en cours de développement, mais parfaitement utilisable, est baptisée
\iontrois. Ce document se base sur cette dernière version.

Enfin, il faut noter que ce document a été rédigé par un débutant,
pour des débutants. Il est donc fort probable que des erreurs, lacune
et autres imprécisions se soient glissées dans ces lignes. L'auteur se
fera un plaisir de les corriger pour peu qu'on les lui signale~!


\section{Installation}

Nous ne détaillerons pas ici les procédures d'installation de \ion. Le
nombre de dépendances étant limité, sa compilation à partir des
sources ne devrait pas poser trop de problèmes.

Pour les heureux debianistes, des paquets tout prêts seront installés
par un simple~:
\begin{code}
apt-get install ion3 ion3-doc ion3-scripts
\end{code}

Et pour les heureux gentooistes, un petit coup de \texttt{emerge}
devrait suffire~:
\begin{code}
emerge ion
\end{code}

Enfin, une dernière méthode d'installation est de recompiler depuis
les sources récupérées directement sur le dépôt \texttt{darcs} du
projet. Pour cela, vous devez avoir installé \texttt{darcs}, puis
lancer la série de commandes suivantes~:
\begin{code}
$darcs get --partial http://iki.fi/tuomov/repos/ion-3/
$cd ion-3
$sh predist.sh -snapshot
\end{code} 
Cela devrait vous générer un paquet source contenant tout ce qu'il
faut pour compiler un \iontrois{} tout frais tout chaud.


\section{Configuration}
\label{config}

La configuration de \ion{} s'effectue entièrement à l'aide de fichiers
texte. Ces fichiers sont en fait des bouts de code en \lua, un langage
de script léger. Les fichiers de configuration du système sont en
général dans \texttt{/etc/X11/ion3} ou dans \texttt{/usr/local/etc/ion3}.

Plutôt que de travailler sur les fichiers s'appliquant à l'ensemble
des utilisateurs de votre système, il est préférable de placer tout ça
dans un répertoire \texttt{\~{}/.ion3}. La première chose à faire est
donc de copier les fichiers de configuration généraux (fichiers
\texttt{cfg\_*.lua}) dans ce répertoire de votre dossier personnel.






\section{Principes de base}

Pour comprendre le fonctionnement d'\ion{}, il faut savoir que
celui-ci s'organise autour d'un petit nombre de concepts. Il est donc
nécessaire de commencer par un (tout petit) peu de théorie. Mais pour
avoir une illustration de ce à quoi ces concepts renvoient, vous
pouvez vous référer à la capture d'écran, figure \ref{presentation}.

\begin{figure}
\begin{center}
\includegraphics{scrinnchotte1.jpg}
\end{center}
\caption{Capture d'écran d'un bureau}
\label{presentation}
\end{figure}

\begin{description}
\item[Écran \textit{(screen)}] Un écran correspond à un écran physique. Cette
  notion n'a de sens que pour ceux qui utilisent plusieurs moniteurs
  en \textit{Xinerama} (ce dont nous ne parlerons pas ici).
\item[Bureau (\textit{workspace})] Un bureau ou espace de travail
  correspond à la même notion que dans les autres gestionnaires de
  fenêtres. Il s'agit d'un \flqq~bureau virtuel~\frqq qui contient lui-même
  un certain nombre d'objets~: soit des cadres soit des \textit{client
    windows} en mode plein écran. Il existe différents types de
  bureaux, en particulier les \flqq~mosaïque~\frqq (\textit{tiled}) (où les
  cadres ne se recouvrent pas et remplissent tout l'écran, comme dans
  la figure \ref{presentation}) et les \flqq~flottants~\frqq
  (\textit{floating}), dans lesquels les cadres peuvent se
  chevaucher et sont librement positionnables.
\item[Cadre (\textit{frame})] Un cadre est un espace rectangulaire
  délimitant une partie de l'écran. Sur la figure \ref{presentation},
  le bureau est divisé en trois cadres.
\item[Fenêtre (\textit{client window})] Les fenêtres clientes sont des
  fenêtres faisant tourner une application. Il peut y avoir plusieurs
  fenêtres dans un seul cadre, c'est le cas pour le cadre supérieur
  droit de la figure \ref{presentation}. Chaque fenêtre est alors
  signalée par un onglet (\textit{tab}) en haut du cadre.
\item[Barre d'état (\textit{statusbar})] La barre d'état de \ion{} est
  une ligne de texte fixe située en bas de l'écran et contenant
  différentes informations de type date, charge système, mails reçus,
  trafic réseau, etc. (tout ceci est bien entendu configurable).
\item[Fenêtre transitoire (\textit{transient window})] Une fenêtre
  transitoire est une fenêtre dépendant d'une application et prévue
  pour n'apparaître que brièvement. Les boîtes de dialogues devraient
  être gérées comme des fenêtres transitoires.
\end{description}

La principale particularité de \ion{} réside dans les \flqq~bureaux en
mosaïque~\frqq (\textit{tiled workspaces}). Dans ce cas, soit les
applications lancées sur ce bureau utilisent toutes la
totalité de l'écran, soit elles prennent la forme d'une \flqq~mosaïque~\frqq
de cadres pouvant eux-mêmes contenir d'autres cadres
ou une ou plusieurs fenêtres d'applications.

Ainsi, si vous lancez un programme classique comme \textsf{Firefox},
celui-ci s'affichera au premier abord en plein écran, sans même de
décorations de fenêtres à part l'onglet en haut de l'écran.

Si une application souhaite afficher une boîte de dialogue, c'est à
dire (normalement) une fenêtre transitoire, celle-ci apparaît à
l'intérieur du même cadre, en général en bas de celui-ci. C'est un peu
déconcertant au début mais on s'y fait très vite (si vous ne comprenez
pas la dernière phrase, faites un \texttt{Fichier > Ouvrir} dans
n'importe quelle application et vous y verrez plus clair).

Il peut arriver que les applications ne gèrent pas ces fenêtres
transitoires de manière correcte, et cela peut générer des problèmes
d'affichage. Nous en reparlerons dans la section \ref{prob}.



\section{Raccourcis claviers}

Pour vivre et même survivre dans \ion, il est indispensable d'imprimer
immédiatement la page de manuel (\texttt{man ion3}, vous avez de la
chance, elle devrait s'ouvrir automatiquement au premier démarrage),
de parcourir la liste des raccourcis claviers et de les garder sous la
main. La première chose à savoir est de comprendre ce que signifie le
symbole \texttt{Mod1}. En règle générale, il s'agit de la touche
\texttt{Alt}, mais la commande \texttt{xmodmap} peut vous aider à
l'identifier.

Une astuce qui peut être utile, et qui limite notamment les collisions
entre les raccourcis claviers de \ion{} et ceux des applications, et
de remplacer la touche \texttt{Alt} par la touche \textit{Windows},
juste à côté, vous savez, celle que vous n'utilisez jamais. Pour cela,
c'est très simple, il vous suffit d'éditer le fichier
\texttt{\~{}/.ion3/cfg\_ion.lua} et de le modifier pour avoir la ligne
suivante~:
\begin{code}
MOD1="Mod4+"
\end{code}

Une autre possibilité est de carrément redéfinir la définition des
\texttt{Mod<n>}. Ceci peut se faire à l'aide de la commande
\texttt{xmodmap} (\texttt{man xmodmap}).

Enfin, il est bien évidemment possible de redéfinir tous les
raccourcis claviers et d'en rajouter à volonté. Tout ceci se fait dans
les fichiers de configuration, et notamment dans
\texttt{\~{}/.ion3/cfg\_bindings.lua}. Consultez \textit{Configuring and extending
  Ion3 with Lua} pour plus d'informations. Dans tout ce qui suit, nous
ne mentionnerons que les raccourcis claviers par défaut?



\section{Visite guidée}

Plutôt que de lister les raccourcis claviers, ce qui n'apporterait
rien de plus que la très complète page de manuel, nous ne reculons
devant rien et nous vous proposons plutôt une visite \flqq~interactive~\frqq
de \ion.


\subsection{Démarrer \ion}

La première chose à faire est d'arriver à le lancer. Pour cela, il
faut fermer votre session X et éditer le fichier \texttt{.xsession}
pour qu'il contienne la ligne suivante~:
\begin{code}
ion3
\end{code}

C'est également dans ce fichier que vous pourrez mettre les
applications à lancer automatiquement au démarrage de \ion, du type
\verb|xscreensaver --no-splash| ou bien différents \textit{dockapps}
de \textsf{WindowMaker}.

Ensuite, faites un simple \texttt{startx} pour lancer tout ça. Vous
devriez vous retrouver sur un bel écran vide, avec juste une ligne en
bas qui vous donne l'heure, la charge et le nombre de mails en
attente, ainsi qu'un joli onglet \textit{<empty frame>} tout en haut.

Une autre méthode consiste à intégrer \ion{} au sein de son
\textit{desktop manager} préféré (\texttt{kdm}, \texttt{gdm},
\texttt{xdm}\ldots). N'en utilisant pas, nous attendrons qu'une âme
charitable passe par ici et veuille bien nous indiquer la marche à
suivre\ldots


\subsection{Lancer des applications}

Bon, et maintenant, je fais quoi ? Pas de panique ! Voici quelques
touches utiles qui vous permettront de lancer un ou deux programmes~:

\begin{description}
\item[\texttt{F1}] vous permettra d'afficher une page de manuel au
  choix. Remarquez la ligne de dialogue qui s'affiche en bas d'écran
  pour vous permettre de saisir le nom.
\item[\texttt{Mod1+F1}] vous affiche directement la page de manuel
  d'\ion. Pratique quand on a oublié les raccourcis clavier.
\item[\texttt{F2}] vous lance directement un terminal. Le choix du
  programme utilisé est celui défini dans \texttt{/etc/alternatives}
  (un petit \texttt{update-alternatives --config x-terminal-emulator}
  devrait vous permettre de personnaliser tout ça).
\item[\texttt{F3}] vous affiche un invite de commande vous permettant
  de lancer ce que vous voulez.
\item[\texttt{Mod1+F3}] vous permet de saisir directement du code \lua.
\item[\texttt{F4}] vous permet d'établir immédiatement une connexion
  SSH vers une autre machine dans un terminal.
\item[\texttt{F5}] vous permet d'éditer un fichier.
\item[\texttt{F6}] vous permet de visualiser le contenu d'un fichier.
\end{description}

Les commandes utilisées pour ces deux dernières fonctions sont
définies dans votre fichier \texttt{mailcap}, qui fait les
associations entre les types MIME et les applications utilisées pour
les ouvrir. Ainsi, si vous voulez utiliser \textsf{Emacs} pour voir et
éditer les fichiers avec \texttt{F5} et \texttt{F6}, rajoutez la ligne
suivante à la fin du fichier \texttt{\~{}/.mailcap}\footnotemark~:

\begin{code}
application/*; emacs %s; edit= emacs %s  
\end{code}

\footnotetext{On me signale dans mon oreillette que cette
  fonctionnalité nécessite la présence du programme
  \texttt{run-mailcap} sur le système. Merci Tuomo.}

Tout cela est bien beau, me direz-vous, mais y'a quand même bien un
menu quelque part, non ? Non ? et bien si ! Pour cela il vous suffit
de presser la merveilleuse touche \texttt{F12}, et vous verrez
apparaître un beau et classique menu avec tout ce qu'il faut pour
lancer des programmes, fermer ou redémarrer \ion, voir tester les
différents \flqq~styles~\frqq fournis en standard (ne vous attendez
pas cependant à des fenêtres transparentes sous des menus déroulants
animés avec ombre portée...). De plus les heureux debianistes
constateront que le menu comporte une entrée \textit{Debian} avec le
menu du système à l'intérieur.

Là encore, les menus sont entièrement configurables, et il est tout à
fait possible, voir conseillé, d'en créer de nouveaux tout en les
associant à des raccourcis claviers personnalisés. Voir le
\textit{Guided tour of Ion2} pour un exemple simple ou
\textit{Configuring and extending Ion3 with Lua} pour plus
d'informations.


\subsection{Utiliser les cadres}

\subsubsection{Naviguer dans les onglets}

Que se passe-t-il si vous lancez plusieurs applications ? Elles
s'ouvrent toutes sur le même écran (le même bureau, puisque pour
l'instant il n'y en a qu'un) et occupent à chaque fois la totalité de
l'écran (qui est composé d'un unique cadre).  Plusieurs onglets
apparaissent alors au-dessus et permettent de passer d'une application
(d'une fenêtre) à une autre à l'aide de la souris. De même, un clic
droit sur un onglet vous offre un menu contextuel permettant diverses
actions. Mais là encore, les raccourcis clavier vous feront gagner du
temps~:

\begin{description}
\item[\texttt{Mod1+K 1, Mod1+K 2, Mod1+K 3, Mod1+K 4\ldots}] vous
  permet de passer directement au \textit{n}-ième onglet du
  cadre.
\item[\texttt{Mod1+K P}] passe à l'onglet précédent.
\item[\texttt{Mod1+K N}] passe à l'onglet suivant.
\item[\texttt{Mod1+K M}] ouvre le menu contextuel de l'onglet.
\item[\texttt{Mod1+K C}] force la fermeture de l'onglet visible.
\item[\texttt{Mod1+C}] ferme l'onglet visible.\\
\end{description}

\textit{Note~:} sur mon clavier français à moi que j'ai, la
combinaison \texttt{Mod1+chiffre} fonctionne avec les touches de la
rangée supérieure du clavier sans passer par la touche
\texttt{Shift}. Ainsi, pour faire \texttt{Mod1+1} je fais en fait
\texttt{Mod1+\&} et pour faire \texttt{Mod1+2} je fais en fait
\texttt{Mod1+é}. Je ne sais pas si c'est une mauvaise configuration de
ma part, mais en tous cas c'est fort pratique\footnotemark.

\footnotetext{On me signale à nouveau dans mon oreillette que oui,
  c'est fait exprès. Merci Tuomo.}


\subsubsection{Créer et supprimer des cadres}

Vous savez donc maintenant comment faire pour passer d'un onglet à
l'autre quand vous n'avez qu'un seul cadre visible. Mais comment faire
pour créer de nouveaux cadres et les manipuler, histoire d'avoir plus
d'une application visible simultanément sur le bureau ?

La création de cadres se fait en scindant l'écran, soit
horizontalement soit verticalement. \texttt{Mod1+S} effectuera une
division verticale, tandis que \texttt{Mod1+K S} fera la même chose
horizontalement. Vous pouvez ainsi diviser les cadres encore et encore
selon vos besoins. 

Pour supprimer une division, un petit \texttt{Mod1+K X} pourra vous
être utile, il permet de supprimer le cadre actuel. S'il contenait des
onglets, ceux-ci seront rassemblés avec ceux déjà existants. À noter
qu'un cadre est également supprimé lorsque vous fermez son dernier
onglet avec \texttt{Mod1+C} ou le menu contextuel.

\subsubsection{Manipuler les cadres}

Pour passer d'un cadre à l'autre, vous pouvez soit cliquer dedans,
évidemment, soit utiliser les raccourcis claviers qui vont bien~:

\begin{description}
\item[\texttt{Mod1+P}] pour passer au cadre du dessus~;
\item[\texttt{Mod1+N}] pour passer au cadre du dessous~;
\item[\texttt{Mod1+Tab}] pour passer au cadre de droite~;
\item[\texttt{Mod1+K Tab}] pour passer au cadre de gauche.\\
\end{description}


Autre opération vitale, savoir redimensionner les cadres pour les
adapter aux fenêtres qu'ils contiennent. Pour cela, encore, vous avez
le choix entre la souris et le clavier~:

\begin{description}
\item[\texttt{Mod1+Button1} ou \texttt{Mod1+Button2}] permet de redimensionner les cadres à la souris~;
\item[\texttt{Mod1+R}] permet de passer en mode redimensionnement (\textit{resize mode}) pendant une brève période.\\
\end{description}

Une fois dans le mode redimensionnement, les raccourcis suivants sont disponibles~:

\begin{description}
\item[\texttt{Gauche, Droite, Haut, Bas, F, B, P, N}] agrandit le
  cadre dans la direction choisie~;
\item[\texttt{Shift+Gauche, Shift+Droite, Shift+Haut, Shift+Bas,
    Shift+F, Shift+B,\ldots}] rétrécit le cadre à partir du
  côté indiqué~;
\item[\texttt{Escape}] annule le mode redimensionnement~;
\item[\texttt{Return}] quitte le mode redimensionnement. À noter que
  la sortie du mode se fait automatiquement au bout d'un certain laps
  de temps paramétrable.\\
\end{description}

\label{depfen}
Bien, vous avez désormais tous pleins de cadres sur votre écran.
Certains sont vides, d'autres contiennent une seule fenêtre, certains
ont plusieurs onglets. Comment je fais pour organiser mes fenêtres
entre tous ces cadres~?\\

Si vous activez un cadre et que vous lancez une application, celle-ci
va s'exécuter à l'intérieur du cadre sélectionné. Mais vous pouvez
bien évidemment passer une fenêtre d'un cadre à un autre. Là encore,
les méthodes souris et claviers sont disponibles~:

\begin{description}
\item[\texttt{Button1}] un simple \textit{drag and drop} sur un onglet
  vous permet de faire passer sa fenêtre d'un cadre à un autre~;
\item[\texttt{Mod1+A}] ouvre une fenêtre de requête et vous permet de
  spécifier le nom d'une fenêtre (pensez à \texttt{Tab} pour la
  saisie) qui sera déplacée vers le cadre actif~;
\item[\texttt{Mod1+T}] vous permet de marquer (\textit{tag}) une
  fenêtre. Un petit signe distinctif apparaît en haut à droite de son
  onglet. La même touche permet de supprimer le marquage~;
\item[\texttt{Mod1+K A}] vous permet de déplacez toutes les fenêtres
  marquées vers le cadre actif.\\
\end{description}

D'autres commandes sont disponibles pour manipuler les cadres, comme
vous le verrez dans la page de manuel de \ion{}. Parmi celles-ci,
deux sont particulièrement utiles~:

\begin{description}
\item[\texttt{Mod1+Return}] vous permet de basculer la fenêtre active
  en mode plein écran. Si vous vous sentez un peu à l'étroit dans
  votre cadre, vous pouvez ainsi à tout moment maximiser l'affichage
  de la fenêtre puis revenir à l'affichage précédent avec la même
  combinaison de touches~;
\item[\texttt{Mod1+K K}] permet de retourner vers le dernier objet
  actif, que celui-ci soit sur le même bureau ou non. C'est très
  pratique si vous avez à basculer régulièrement entre deux fenêtres.\\
\end{description}



\subsection{Créer des bureaux}
\label{desktypes}

\ion{} supporte évidemment les bureaux virtuels. Avoir plusieurs
bureaux vous permet par exemple d'avoir différentes répartitions de
cadre.

Il existe trois types de bureaux~:

\begin{description}
\item[\texttt{WIonWS}] il s'agit du type de bureaux que nous venons de
  décrire, avec des cadres \flqq~en mosaïque~\frqq~;
\item[\texttt{WFloatWS}] il s'agit des bureaux flottants dont nous parlerons
  dans la section \ref{floatdesk}~;
\item[\texttt{WPaneWS}] il s'agit d'un troisième type de bureaux avec des
  cadres \flqq~élastiques~\frqq. N'ayant pas bien compris le fonctionnement
  de ce type de bureau, nous n'en parlerons pas dans ce document pour
  le moment.\\
\end{description}

Pour créer un bureau, deux solutions s'offrent à vous~:

\begin{description}
\item[\texttt{F9}] vous permet de créer un nouveau bureau. \ion{}
  commence par vous demander un nom pour ce bureau (facultatif), puis
  son type (voir ci-dessus)~;
\item[\texttt{Mod1+F9}] vous permet de créer immédiatement un nouveau
  bureau avec le type par défaut, sans que vous ayez à saisir une
  quelconque information.\\
\end{description}


Lorsque vous avez plusieurs bureaux, se déplacer d'un bureau à l'autre
est très simple et se fait au clavier~:

\begin{description}
\item[\texttt{Mod1+1, Mod1+2, Mod1+3, \ldots}] vous permet de passer
  directement au \textit{n}-ème bureau~;
\item[\texttt{F9}] si vous indiquez le nom d'un bureau déjà existant
  (pensez à \texttt{Tab}), cette commande vous permet de passer sur ce
  bureau plutôt que d'en créer un nouveau.\\
\end{description}


Pour supprimer un bureau, c'est très simple, il suffit de fermer
toutes les fenêtres que ce bureau contient et de faire un
\texttt{Mod1+C} sur le bureau désormais vide.\\

Pour déplacer des fenêtres d'un bureau à l'autre, il vous suffit
d'utiliser la méthode décrite dans la section \ref{depfen}, à l'aide
de \texttt{Mod1+A} ou de \texttt{Mod1+T} et \texttt{Mod1+K A}.\\

Enfin, à noter que lorsque vous basculez une fenêtre en mode plein
écran à l'aide de \texttt{Mod1+Return}, \ion{} crée en fait un nouveau
bureau placé en fin de liste avec cette fenêtre maximisée.



\subsection{Utiliser un bureau flottant}
\label{floatdesk}

Arrivés ici, vous devez commencer à avoir une petite idée de
l'utilisation et peut-être de l'intérêt d'un gestionnaire de fenêtres
gérant des \flqq~cadres en mosaïque~\frqq. Ce modèle n'est cependant pas
optimal pour la totalité des applications. Utiliser \textsf{The Gimp} de
cette manière, par exemple, peut s'avérer un peu ardu\footnotemark.

\footnotetext{Ah, on me signale qu'apparemment certains auraient
  découvert que même \textsf{Gimp} est plus facile à utiliser dans un
  bureau en mosaïque. Disons que je n'ai pas encore franchi le temps
  d'adaptation nécessaire.}

La particularité de \ion{} est de proposer également des bureaux
flottants, avec des cadres mobiles pouvant se recouvrir, à la manière
de la plupart des gestionnaires de fenêtres actuels.

Nous avons vu dans la section \ref{desktypes} comment créer un
bureau de ce type. Nous nous attarderons moins sur l'utilisation des
bureaux flottants, mais voici quand même quelques indications
potentiellement utiles.

Lorsque vous lancez une application dans un bureau flottant, celle-ci
s'affiche dans un cadre de manière \flqq~traditionnelle~\frqq, sans prendre
toute la place disponible. Vous pouvez déplacer ce cadre en cliquant
sur son onglet. Vous pouvez également le \flqq~replier~\frqq en
double-cliquant sur l'onglet en question.

Une des particularités de \ion{} est la possibilité, comme dans le
type de bureau précédent, de regrouper des fenêtres dans un même cadre
flottant. Ceci se fait en cliquant sur un onglet avec le bouton du
milieu et en faisant un \textit{drag and drop} sur un autre cadre, ou
bien à l'aide des commandes de déplacement de fenêtres déjà décrites
(\texttt{Mod1+A, Mod1+T, Mod1+K A\ldots}.

Voici quelques raccourcis bien utiles pour les bureaux flottants~:

\begin{description}
\item[\texttt{Mod1+Tab}, \texttt{Mod1+K Tab}] permet de passer d'un cadre flottant à
  l'autre~;
\item[\texttt{Mod1+Button1}] permet de déplacer un cadre sans avoir à cliquer
  spécifiquement sur un onglet~;
\item[\texttt{Mod1+Button3}] permet de redimensionner un cadre~;
\item[\texttt{Mod1+P}, \texttt{Mod1+N}] permet de faire passer le cadre actif au premier
  plan / en arrière plan.
\end{description}

À noter que \ion{} considère que le cadre actif est celui sous lequel
se trouve la souris, sans que vous ayez à cliquer dessus pour
l'activer. Un cadre peut être actif sans être au premier plan. Ceci
peut parfois surprendre dans les premiers temps d'utilisation.


\section{Astuces diverses}

Les \flqq~astuces~\frqq présentées ci-dessous consistent en fait en
l'utilisation de modules de \ion{} (en fait des scripts en \lua)
fournis avec le programme. Pour cela, il va falloir éditer les
fichiers de configuration. Comme indiqué dans la section \ref{config},
plutôt que de bidouiller les fichiers s'appliquant à l'ensemble des
utilisateurs de votre système, il est préférable de placer tout ça
dans un répertoire \texttt{\~{}/.ion3}.\\

La première chose à faire est donc de copier les fichiers de
configuration généraux (sous \textsf{Debian}, il s'agit des fichiers
\texttt{cfg\_*.lua} situés dans le répertoire \texttt{/etc/X11/ion3})
dans ce répertoire de votre dossier personnel.


\subsection{Personnaliser la barre d'état}

La barre d'état est cette petite ligne de texte en bas de l'écran qui
contient par défaut un certain nombre d'informations sur le système~:
par défaut date et heure, charge, mails en attente.\\

La barre d'état est gérée par le module \texttt{mod\_statusbar}. Pour
activer ce module (ce qui est le cas par défaut), vous devez avoir la
ligne suivante dans votre \texttt{cfg\_ion.lua}~:

\begin{code}
dopath("mod_statusbar")
\end{code}

Le contenu de cette zone est bien évidemment totalement paramétrable.
La personnalisation se fait dans le fichier
\texttt{cfg\_statusbar.lua}. On peut ainsi choisir où placer cette
zone sur l'écran et surtout modifier son contenu à l'aide de la
variable \texttt{template}.

Pour ajouter des informations à la barre d'état, le plus simple est
d'utiliser les scripts \lua{} fournis spécialement à cet effet.
Ceux-ci sont nommés \texttt{statusd\_*.lua} et sont situés, du moins
sous \textsf{Debian}, dans le répertoire \texttt{/usr/share/ion3}.
Pour utiliser l'un de ces scripts, il vous suffit d'indiquer la chaîne
\texttt{\%nom\_du\_module} dans la variable \texttt{template}.

Ainsi, si vous souhaitez afficher des informations sur la charge
réseau de votre système, fournies par le script
\texttt{statusd\_netmon.lua}, il vous suffit d'ajouter
\texttt{\%netmon} à l'endroit voulu dans la variable template. À noter
qu'en préfixant le nom du script par \texttt{<}, \texttt{>} ou
\texttt{\textbar}, vous pouvez modifier l'alignement de la chaîne de
caractères générée, et qu'en utilisant un espace précédé du caractère
\texttt{\%} vous introduisez un \flqq~espace élastique~\frqq qui peut
faciliter l'affichage.\\

Juste pour information, ma barre d'état actuelle est la suivante~:

\begin{code}
template="[ %date || load:% %>load || mail:% %>mail_new/%>mail_total || %>sysmon || %>netmon ]"
\end{code}


\subsection{Utiliser des \textit{dockapps} \textsf{WindowMaker}}

La barre d'état, c'est joli et pratique, mais on regrette parfois ses
bons vieux \textit{dockapps} qui faisaient notre bonheur sous
\textsf{WindowMaker}. Et bien figurez-vous que \ion{} gère très bien
la plupart des \textit{dockapps} en question.

Si vous souhaitez en profiter, il vous faut d'abord activer le module
\texttt{mod\_dock} dans votre \texttt{cfg\_ion.lua} à l'aide de la ligne
suivante~:

\begin{code}
dopath("mod_dock")
\end{code}


Vous pouvez également configurer plus finement ce mode à l'aide du
fichier \texttt{cfg\_dock.lua}. Vous pouvez ainsi personnaliser la
position d'affichage des dockapps à l'écran à l'aide de la variable
\texttt{pos}~:

\begin{code}
pos="tr"
\end{code}


Vous pouvez choisir entre des \textit{dockapps} \flqq~flottants~\frqq, qui
se superposent aux cadres existants quand ils sont affichés, ou bien
des \textit{dockapps} \flqq~embarqués~\frqq, toujours visibles et qui
s'affichent à la manière de la barre d'état par défaut. Ceci se règle
à l'aide de la variable \texttt{mode}~:

\begin{code}
mode="floating"
\end{code}


\textit{Attention~:} les \textit{dockapps} embarqués sont
incompatibles avec la barre d'état. Donc soit vous choisissez de ne
pas utiliser la barre d'état, soit vos \textit{dockapps} seront
forcément flottants.

Enfin, vous pouvez également configurer le raccourci clavier à
utiliser pour afficher/masquer vos \textit{dockapps}. La touche par
défaut est \texttt{Mod1+D}, mais vous pouvez changer ça à la ligne
suivante~:

\begin{code}
kpress(MOD1.."D", "mod_dock.set_floating_shown_on(_, 'toggle')")
\end{code}

Bon, tout cela est bien beau, mais je fais comment, moi, pour lancer
mes \textit{dockapps}~? Et bien c'est très simple~: il vous suffit
d'exécuter le programme correspondant et celui-ci sera automatiquement
ajouté à la liste. Et si vous souhaitez un lancement automatique au
démarrage, il vous suffit de les ajouter dans votre fichier
\texttt{.xsession}.



\subsection{Utiliser un \textit{frame sp}}

Un \textit{frame sp}, encore dénommé \textit{scratchpad}, est un cadre
pouvant être affiché/masqué à tout moment à l'aide d'un raccourci
clavier, quel que soit le bureau sur lequel vous vous trouvez. Ça peut
être très pratique pour avoir toujours une console sous la main, par
exemple.

Par défaut le \textit{scratchpad} est un cadre de taille plutôt
réduite s'affichant au milieu de l'écran, mais vous pouvez bien
entendu régler tout ça.\\

Pour activer cette fonctionnalité, fournie par le module
\texttt{mod\_sp}, vous devez avoir la ligne suivante dans votre
\texttt{cfg\_ion.lua}~:

\begin{code}
dopath("mod_sp")  
\end{code}


Le raccourci par défaut pour basculer l'affichage du
\textit{scratchpad} est \texttt{Mod1+Espace}. Vous pouvez modifier
cela en éditant la ligne suivante du fichier \texttt{cfg\_sp.lua}~:

\begin{code}
kpress(MOD1.."space", "mod_sp.set_shown_on(_, 'toggle')")
\end{code}


\subsection{Inclure un bureau flottant dans un cadre en mosaïque}

Et oui, tout est possible avec \ion. Vous pouvez donc inclure
l'équivalent d'un bureau flottant à l'intérieur d'un cadre d'un bureau
en mosaïque. Pour cela, il suffit d'exécuter le code \lua{} suivant (à
l'aide de \texttt{Mod1+F3}, faut-il le rappeler)~:

\begin{code}
  _:attach_new({type="WFloatWS"})
\end{code}

Et vous pouvez même inclure dans un cadre de ce bureau flottant
l'équivalent d'un autre bureau en mosaïque. Qui lui-même, etc.,
etc. La capture d'écran suivante, tirée du site de Matthieu Moy, donne
une idée de ce que ça peut donner~:

\url{http://www-verimag.imag.fr/~moy/ion/ion-screenshot.png}


\subsection{Associer une application à un cadre (\textit{winprops)}}

Vous l'aurez sans doute remarqué, lorsque vous quittez \ion{},
celui-ci sauvegarde la disposition de vos bureaux et de vos cadres,
que vous retrouvez telle quelle au lancement suivant. Ceci est très
pratique, surtout si on l'associe au fait qu'\ion{} est capable
d'associer une application et un cadre de manière à ce que celle-ci
s'exécute toujours dans le même cadre.

Les utilisations potentielles sont multiples. Vous pouvez par exemple
prévoir un cadre de petite taille sur votre premier bureau et prévoir
que celui-ci servira à l'exécution d'un lecteur de musique ou d'un
logiciel de messagerie instantanée.

Dans l'exemple qui suit, nous faisons en sorte que toutes les fenêtres
d'Emacs s'affichent dans le même cadre. La marche à suivre est la
suivante\footnotemark~:

\footnotetext{Cet exemple est directement adapté de \textit{A guided
    tour of Ion2}.}

\begin{itemize}
\item Tout d'abord, il faut déterminer l'instance et la classe de la
  fenêtre de l'application concernée. Pour cela, il faut lancer la
  commande suivante dans un terminal et cliquer dans la fenêtre
  choisie~:
  \begin{code}
xprop WM_CLASS
  \end{code}
\item Vous devriez obtenir un résultat de ce type~:
  \begin{code}
WM_CLASS(STRING) = "emacs", "Emacs"
  \end{code}
\item La seconde chose à faire est de nommer explicitement le cadre
  qui vous intéresse. Pour cela, exécutez le code \lua{} suivant à
  l'aide de \texttt{Mod1+F3} et indiquez le nom choisi
  (\texttt{emacsframe}) dans notre cas~:
  \begin{code}
mod_query.query_renameframe(_)
  \end{code}
\item Enfin, éditez votre fichier de configuration
  \texttt{cfg\_ion.lua} et ajoutez les lignes suivantes~:
  \begin{code}
defwinprop {
  class = "Emacs",
  instance = "emacs",
  target = "emacsframe",
}
  \end{code}
\end{itemize}

Ceci n'est qu'un tout petit aperçu de ce qu'il est possible de faire
avec les \textit{winprops}. Consulter \textit{Configuring and
  extending Ion3 with Lua} pour plus d'informations.



\section{Problèmes}
\label{prob}

L'utilisation de \ion{} peut parfois poser quelques problèmes avec
certaines applications. Le gestionnaire de fenêtres n'est pas en
cause, c'est plutôt la manière dont l'interface graphique de ces
applications a été conçue qui serait à revoir, apparemment.

Parmi les applications qui peuvent poser problème, \textsf{Adobe
  Reader} semble assez bien placé. J'ai également remarqué que
\textsf{tsclient} avait tendance à m'ouvrir des fenêtres d'erreur en
arrière-plan que je ne repérais pas dans les premiers temps.

La plupart de ces problèmes sont liés à la manière dont ces
applications gèrent les fenêtres transitoires (les boîtes de
dialogue)~: plutôt que de laisser le gestionnaire de fenêtres s'en
occuper, elles préfèrent garder la main dessus, contrairement aux
standards devant s'appliquer sous X\footnotemark.\\

\footnotetext{Ces standards, qui portent le doux nom d'ICCCM
  (\textit{Inter-Client Communications Conventions Manual}) peuvent
  être consultés à l'adresse~: \url{http://tronche.com/gui/x/icccm/}}

Il existe des techniques assez sophistiquées pour résoudre ces
difficultés. Pour faire très simple, en général il suffit de lancer
l'application problématique en mode \flqq~bureau flottant~\frqq,
beaucoup plus proche du mode \flqq~traditionnel~\frqq de
fonctionnement des gestionnaires de fenêtres, pour que tout rentre
dans l'ordre ou du moins pour que l'application soit parfaitement
utilisable. Pour des solutions plus compliquées mais plus
satisfaisantes, consultez le document \textit{Configuring and
  extending Ion3 with Lua}.



\section{Ressources}

\begin{itemize}
\item Site officiel de \ion{}\\ 
  \url{http://iki.fi/tuomov/ion/}
\item FAQ de \ion{}\\ 
  \url{http://modeemi.fi/~tuomov/ion/faq.html}
\item Document \textit{Configuring and extending Ion3 with Lua}\\
  \url{http://modeemi.fi/~tuomov/ion/doc-3/ionconf/}
\item Collection de scripts pour \iontrois{}\\ 
  \url{http://modeemi.fi/~tuomov/repos/ion-scripts-3/}
\item \textit{A Guided Tour Of Ion2}\\
  \url{http://modeemi.fi/~tuomov/ion/misc/guidedtour.html}
\item \textit{The Ion Window Manager} de Matthieu Moy\\
  \url{http://www-verimag.imag.fr/~moy/ion/}
\item \textit{My Ion Page} de Thomas Nemeth\\ 
  \url{http://tnemeth.free.fr/ion/}
\item \textit{XSteve's Ion page}\\ 
  \url{http://www.xsteve.at/prg/ion/}
\end{itemize}


\section{À propos de ce document}

Ce document est disponible aux formats \textsf{HTML}, \textsf{PDF} et
code source \LaTeX. L'adresse de référence est la suivante~:

\url{http://blog.nozav.org/docs/}

Il est publié sous licence \textit{Creative Commons Attribution}. Vous
pouvez voir une copie de cette licence à
l'adresse \url{http://creativecommons.org/licenses/by/2.5/}.

Copyright \copyright{} 2005 Julien Barnier -- \href{mailto:julien(arobase)nozav.org}{\texttt{julien(arobase)nozav.org}}.

Contributeur~: Sylvain Abélard -- \href{mailto:sylvain.abelard(arobase)gmail.com}{\texttt{sylvain.abelard(arobase)gmail.com}}.

N'hésitez pas à nous contacter pour tout commentaire ou suggestion.



\end{document}


