ION, le véritable « graphical shell » Un gestionnaire de fenêtres hors du commun apportant des fonctionnalités rendant l'utilisation d'un ordinateur en mode graphique des plus rapide grâce à la parfaite gestion de l'agencement des fenêtres et la possibilité de ne pas utiliser la souris la plupart du temps. INTRODUCTION Il y a de cela longtemps (un an ou deux), j'ai entendu parler d'un concept de gestionnaire de fenêtres totalement révolutionnaire qui n'avait pas de fenêtres comme les autres et qui se pilotait quasiment entièrement au clavier. Je m'étais renseigné et avais regardé quelques screenshots et ça semblait sympathique, mais bouleversait trop ce que je savais... Il y a deux semaines, je me suis dit qu'étant donné la taille de mon écran de portable et la gourmandise mémoire des WMs habituels, pourquoi ne pas essayer. Je l'ai téléchargé, compilé. D'ailleurs, bien qu'il ne fasse pas appel à autoconf/automake, le système est très bien fait : configuration simple, pas de dépendance, compilation sans douleur. Puis je l'ai installé. Je l'ai lancé... Depuis je ne suis repassé qu'une seule fois sous Window Maker pour quelques tests (du moins sur le portable, car avec des machines plus puissantes d'autres WMs sont plus pratiques et adaptés) ! Je veux parler de Ion. DESCRIPTION GÉNÉRALE Qu'a-t-il de si révolutionnaire ? C'est simple : il n'y a pas de fenêtre au sens habituel du terme, mais des frames (les adeptes de [X]Emacs ne seront pas trop dépaysés). Une frame (en français : « cadre ») est ??? Il y a donc des frames à la place des fenêtres... Pas de bordure ni de barre de redimensionnement. Un des effets de ce type de gestion est qu'il n'y a pas de chevauchement entre les fenêtres. Mais aussi que les applications prennent toute la place disponible dans la frame lorsqu'elles sont ouvertes. Comme Window Maker, Ion utilise des workspaces et non des bureaux virtuels à l'instar des gestionnaires de fenêtres plus courants. Chacun de ces workspaces peut être divisé en plusieurs frames. Initialement, au moment de la création du workspace, il n'y a qu'une seule frame qui fait _tout_ l'écran (sans parler du cadre de 2 pixels qui fait le tour de la frame et de la barre de titre). On crée des frames supplémentaires en divisant la frame initiale verticalement ou horizontalement et ainsi de suite pour les nouvelles frames créées. Tout cela se fait hiérarchiquement, c'est-à-dire que les frames sont organisées en arbre, les unes dans les autres. On s'en aperçoit lorsqu'on regarde dans le fichier de sauvegarde des workspaces (voir plus loin), et lorsqu'on les détruit. UTILISATION Les frames sont créées à la demande par quelques raccourcis claviers et leur taille peut être arrangée dans tous les sens. De même, on se déplace de frame en frame grâce à des raccourcis clavier configurables --- comme tous les raccourcis claviers de Ion --- mais aussi à la souris. Heureusement, car quand on ne connaît pas encore les bons raccourcis il n'est pas facile de s'en servir : y jeter un coup d'oeil avant de l'utiliser est une bonne idée si on veux pouvoir le quitter facilement sans avoir à tuer la session X avec CTRL-ALT-BACKSPACE. Les raccourcis par défaut sont décris plus loin. Lancer des applications dans les frames se fait aussi avec des raccourcis claviers (comme d'ailleurs toutes les opérations). Une application lancée dans une frame est appelée `client', et il est possible (et très pratique) de mettre plusieurs clients dans une même frame. Du coup la barre de titre se divise pour accueillir le titre du nouveau client. On change de client dans une frame soit à la souris soit au clavier. Il est aussi très simple de rattacher un client d'une frame à celle qui a le focus. De même, aller directement à un client même s'il n'est pas dans le workspace courant se fait très facilement grâce à la complétion automatique des noms de clients avec TAB. Le gestionnaire de fenêtres inclue un ensemble de commandes que l'on peut lancer directement à partir du clavier et qui sont, elles aussi, complétées automatiquement si besoin est. Lors de la complétion de commandes ou de noms de clients, de programmes, la liste des possibilités s'ouvre afin de permettre le choix de l'une d'elles. La disposition des frames et des workspaces est sauvegardée à l'arrêt de Ion si tant est qu'on n'ait pas détruit celles qu'on voulait garder :) Cette configuration est sauvegardée dans ~/.ion/workspaces-:0.0.conf (comme on le voit, il peut y avoir plusieurs configurations pour chacun des displays)... INSTALLATION L'installation du programme se fait très simplement. Après avoir téléchargé les sources sur le site ouaibe, il suffit d'extraire les fichiers et de lire le fichier README qui indique quels fichiers sont à éditer pour configurer. Ces fichiers sont tout d'abord system.mk qui sera utilisé pour les variables nécessaires à make --- en particulier PREFIX --- et ensuite config.h qui contient des options internes (j'ai juste modifié la valeur de la constante CF_MIN_WIDTH afin de régler la largeur minimum des frames). Enfin, la compilation via `make' se passe sans problème et l'installation se fait avec `make install'. Lorsqu'on le lance, Ion va lire les fichiers de configuration par défaut, s'il ne trouve pas ceux de l'utilisateur, dans PREFIX/etc/ion. Il suffit de les copier dans ~/.ion/ et de les adapter pour se faire sa propre configuration. CONFIGURATION La configuration du gestionnaire de fichiers est divisée en plusieurs fichiers distincts. En fait il pourrait n'y en avoir qu'un seul, mais c'est plus clair de diviser en plusieurs, histoire de pouvoir simplement changer de look. Par défaut il y a 4 fichiers de configuration dont trois sont chargés à partir du fichier principal ~/.ion/ion.conf. Les trois autres sont : - look-greyviolet.conf : le fichier qui, comme son nom l'indique permet de configurer le look --- il y en a plusieurs autres de fournis et sont déjà inclus dans ion.conf, mais leur inclusion est commentée. - bindings-default.conf : le fichier de configuration des raccourcis clavier (à modifier --- voir plus loin). - kludges.conf : il permet d'adapter le comportement de ion pour certaines applications qui ont un comportement non idéal (je n'ai pas encore approfondi sa configuration --- mais je n'ai pas de problème pour l'instant). Le gestionnaire a ses propres commandes qu'il est très simple de rattacher à des raccourcis claviers. Pour savoir comment faire et quoi mettre dans ces fichiers, sont fournis principalement deux fichiers dans PREFIX/doc/ion/ : config.txt et functions.txt décrivant respectivement le format des fichiers de configuration et la liste des fonctions pouvant être liées à des raccourcis et événement souris. D'autres fichiers de `look' sont fournis, mais après plusieurs essais, j'ai gardé le look greyviolet qui me semble le plus beau, mais je l'ai un peu adapté. LIMITATIONS Par défaut la taille des frames a une limite inférieure. Pour la changer, il faut éditer le fichier config.h et le modifier comme je l'ai décrit plus haut. Ion n'a pas encore de dock ni de frame/client `sticky' (restant présent sur tous les workspaces), mais ça viendra : la fonctionnalité est très demandée sur la mailing-list. Il n'est possible pour l'instant de charger de façon automatique des applications, lors du lancement, dans des frames qu'en appliquant un patch. La gestion des frames (par des numéros) est assez particulières, mais des modifications dans le code sont à venir aussi de ce côté là. Une autre limitation est que les applications ayant un nombre de fenêtres supérieur à deux (limite approximative : c'est surtout une question de feeling) sont difficiles à manipuler... En effet, chaque fenêtre au sens habituel du terme nécessite d'être dans une frame (et est ouverte dans celle où l'on se trouve) ce qui rend difficile l'utilisation de telles applications. La plus difficilement utilisable étant `The Gimp' avec son nombre de fenêtres impressionnant. Ceci dit, sur le portable qui a servi aux tests et qui n'est plus de toute jeunesse, on ne lance que très rarement. Il faut aussi dire qu'il n'a pas été codé dans l'optique de Ion ;-) De même les dockapps ne sont pas très adaptées à une utilisation avec Ion, mais c'est pas bien grave de mon point de vue... À noter que GkRellm semble y fonctionner parfaitement. De plus, la gestion d'un dock viendra dans les prochaines versions. Autre chose : lorsqu'on ouvre une application, celle-ci apparaîtra dans la frame qui a le focus au moment de la création de la fenêtre de l'application (par exemple : on lance netscape / mozilla / whatever qui prends un certain temps à se charger, et bien si on a changé de frame ou de workspace entre temps, la fenêtre apparaîtra dans cette frame et non dans celle où il a été lancé). Dernière limitation, mais qui n'existe pas avec les versions récentes d'Xfree : les xterms ne semblent pas toujours pouvoir reconnaître le nombre de colonnes disponibles. En effet, si avec les versions 3.3.x, on tente de lancer un xterm avec une largeur définie par -geometry, celle-ci est prise comptant alors que la largeur de la frame est souvent différente. La fenêtre de l'xterm est alors agrandie aux dimensions de la frame alors que le nombre de colonnes pris en compte par les applications est celui fourni par la géométrie. L'affichage de ces applications ne se fait que dans les limites de cette géométrie, laissant plein de place non utilisée. RACCOURCIS CLAVIER PAR DÉFAUT Pour ce qui est de la configuration des touches de raccourcis, par défaut voici ce à quoi elles servent : F1 Affiche une page de manuel Alt+F1 Affiche la page de manuel de Ion F2 Lance un xterm F3 Lance un programme Alt+F3 Lance une fonction F4 Lance une nouvelle session SSH F5 Ouvre un fichier pour l'éditer F6 Ouvre un fichier pour le visualiser F9 Va sur un workspace existant ou créé un nouveau Alt+F9 Créé un nouveau workspace avec le client actif F11 Redémarre Ion F12 Quitte Ion Alt+N Va à la frame du dessous Alt+P Va à la frame du dessus Alt+Tab Va à la frame de droite Alt+K Tab Va à la frame de gauche Alt+n Va nième workspace Alt+K N Va au prochain client dans la frame Alt+K P Va au précédent client dans la frame Alt+K n Va au nième client dans la frame frame Alt+K K Va au précédent client actif Alt+A Attache un client dans la frame courante Alt+G Va au client demandé Alt+V Redimensionne verticalement Alt+H Redimensionne horizontalement Alt+K V Maximise verticalement Alt+K H Maximise horizontalement Alt+S Divise verticalement Alt+K S Divise horizontalement Alt+C Ferme le client ou détruire la frame vide Alt+K C Tue le client Alt+K X Détruit la frame J'ai personnellement modifié la grande majorité de ces raccourcis afin de les faire fonctionner plus facilement sur mon portable. De même j'ai fait attention de ne pas entraver les raccourcis claviers d'XEmacs ni de netscape qui utilisent amplement la touche ALT. DANS LE FUTUR À l'heure actuelle Ion est en phase intensive de développement. La base de PWM et celle de Ion sont en train d'être fusionnées en une bibliothèque pour le futur Ion qui sera un mélange configurable entre PWM et le Ion actuel (PWM est les gestionnaire de fenêtres duquel est issu Ion). En développement aussi, un système de langage d'extension afin de pouvoir écrire rapidement des modules supplémentaires. Bien entendu, une partie des fonctionnalités régulièrement demandées décrites plus haut sont aussi inclues dans la version de développement. Sur la page du projet on trouve un snapshot de la version de développement, mais celle-ci n'est pas totalement stable. Elle inclue la gestion des docks. DOCUMENTATION ET LIENS On trouve sur la page principale de Ion des liens vers les paquets sources ainsi que vers la documentation avec quelques photos d'écran et les archives de la liste de discussions. J'ai rapidement fait une page sur mes modifications de la configuration, quelques scrinechautes, j'ai même fait des tentatives de logo puisqu'apparemment il n'en a pas. De même, un petit script tout mignon permet de lancer rapidement plusieurs applications prédéfinies dans le code du script, un petit moniteur système configurable, ainsi que des looks de PWM que j'ai importé rapidement. La page officielle de Ion : http://www.students.tut.fi/~tuomov/ion/ Ma page personnelle sur Ion : http://tnemeth.free.fr/ion/ Thomas Nemeth.