web-dev-qa-db-fra.com

Création d'un gestionnaire de fenêtres

Un de mes nouveaux projets à domicile sera un simple gestionnaire de fenêtres, mais avant de commencer, je dois savoir certaines choses:

  • Quelle est la meilleure langue pour le faire?
  • Où trouver des ressources pour apprendre?
44
Nathan Campos

Une décision importante est de savoir comment vous allez parler au serveur X. Vous pouvez utiliser les liaisons Xlib pour la langue de votre choix, ou vous pouvez utiliser les liaisons XCB de niveau supérieur. (Si vous êtes fo , vous pouvez ouvrir directement une socket sur le serveur X.)

Pour savoir comment un gestionnaire de fenêtres doit se comporter, il existe deux documents qui spécifient les conventions et les politiques: EWMH et ICCCM 1. Le respect de ceux-ci signifie que votre gestionnaire de fenêtres se comportera bien dans GNOME, KDE, XFCE et tout autre environnement de bureau, même si les ignorer est certainement plus facile lors de votre premier essai.

Un gestionnaire de fenêtres n'a pas besoin d'être une énorme boule compliquée de C - Les gestionnaires de fenêtres réussis ont été écrits dans des langages de haut niveau comme LISP, Haskell et Python, et même certains en C sont restés petits et lisibles. XMonad , écrit en Haskell, est resté sous 1000 lignes pendant un certain temps. StumpWM (LISP commun) et DWM (C) sont tous deux assez minimalistes. Vous pourrez peut-être lire leur code source pour vous inspirer sur la façon de concevoir un WM.


1 Elijah Newren a écrit:

N'y allez pas et ne lisez pas ces choses. ILS SONT VRAIMENT, vraiment ennuyeux. Si vous le faites, vous finirez probablement par rattraper votre sommeil au lieu de pirater Metacity. ;-)

À bien y penser, la documentation de Metacity a beaucoup à dire sur la façon dont elle interagit avec les fenêtres et sur le type de propriétés étendues qu'elle prend en charge.

62
Josh Lee

le tinywm en C peut être utile pour commencer.

27
mtvee

Bien qu'un autre langage et un ensemble de bibliothèques soient techniquement possibles, je pense que le meilleur choix de langue serait C et les bibliothèques Xlib ou XCB. La plupart des gestionnaires de fenêtres pour X utilisent cela, et il y a déjà beaucoup d'élan et de maturité pour ces bibliothèques particulières.

Quelques documents d'intérêt:

  • manuel Xlib - doit être lu pour une programmation X de bas niveau.
  • ICCCM - conventions et interfaces pour la communication entre les applications X et le gestionnaire de fenêtres.
  • XCB - un remplacement du 21e siècle pour Xlib. C'est un niveau un peu inférieur et prend moins de décisions pour vous que Xlib. D'après ce que je comprends, le résultat est potentiellement de meilleures performances en raison d'un plus grand potentiel d'asynchronicité, mais je dois avertir que je n'ai jamais travaillé avec.
12
asveikau
  • Quelle est la meilleure langue pour le faire?

    Celui avec lequel vous êtes le plus à l'aise. Il existe de nombreux exemples de gestionnaires de fenêtres réussis dans de nombreuses langues différentes. Qtile et xmonad sont de bons exemples, écrits en Python et Haskell respectivement.

  • Où trouver des ressources pour apprendre?

    J'irais voir certains des gestionnaires de fenêtres existants. Il y en a beaucoup, donc au moins certains d'entre eux doivent avoir du code lisible. Voici la Liste complète des gestionnaires de fenêtres pour Unix .

8
Mikael Auno

Je sais que ce sujet est un peu ancien, mais je me demandais la même chose. Ce gestionnaire de fenêtres appelé i semble être un bon moyen d'apprendre également.

7
Alex Ozer