2009-11-28 9 views
41

Uno dei miei nuovi progetti casa sarà un semplice gestore di finestre, ma prima di iniziare ho bisogno di sapere alcune cose:Costruire un Window Manager

  • che è la lingua migliore per fare questo?
  • Dove trovare delle risorse da apprendere?
+5

@dmckee Il mio compilatore sto sviluppando perché ho acquistato un libro per questo, ma il mio sistema operativo è già sviluppato in Assembly (vedi nel mio pastebin: ** nathanpc.pastebin.com/**, il nome sarà osasm **;) **) –

+4

oh mio ... vuoi davvero impazzire? –

risposta

60

Una decisione importante è come parlerete con il server X. È possibile utilizzare i binding Xlib per la lingua scelta oppure utilizzare i binding di livello superiore XCB. (Se siete insane, si potrebbe aprire un socket per il server X direttamente.)

sapere come un window manager dovrebbe comportarsi, ci sono due documenti che specificano le convenzioni e le politiche: EWMH e ICCCM . Conformandosi a questi significa che il gestore delle finestre si comporterà bene in GNOME, KDE, XFCE e qualsiasi altro ambiente desktop che si presenta, anche se semplicemente ignorarli è sicuramente più semplice al primo tentativo.

Un window manager non deve essere un enorme, complicato insieme di C - I gestori di finestre di successo sono stati scritti in linguaggi di alto livello come Lisp, Haskell e Python, e anche alcuni in C sono rimasti piccoli e leggibili. XMonad, scritto in Haskell, è rimasto sotto 1000 linee per un bel po 'di tempo. StumpWM (Common Lisp) e DWM (C) sono entrambi abbastanza minimalisti.Potresti essere in grado di leggere il loro codice sorgente per trarre ispirazione su come progettare un WM.


Elia Newren ha scritto:

NON andare a leggere quelle cose. SONO DAVVERO, DAVVERO FORSE. Se lo fai, probabilmente finirai per recuperare il sonno invece di hackerare Metacity. ;-)

Vieni a pensarci bene, Metacity 's documentazione ha un bel po' da dire su come interagisce con le finestre e che tipo di proprietà estese che supporta.

+7

+1 per il rilevamento di alcune delle lingue che sono state utilizzate. – dmckee

+0

odio roba di alto livello. bastone malato a c. e aprirò anche il socket al server x direttamente – NathanProgrammer

11

Mentre un altro linguaggio e una serie di librerie sono tecnicamente possibili, penso che la scelta della lingua migliore sarebbe C e le librerie Xlib o XCB. La maggior parte dei gestori di finestre per X lo usano, e c'è già molto slancio qui e maturità per queste particolari librerie.

Alcuni documenti di interesse:

  • Xlib manual - deve leggere a basso livello di programmazione X.
  • ICCCM - convenzioni e interfacce per la comunicazione tra applicazioni X e il gestore di finestre.
  • XCB - un sostituto del 21 ° secolo per Xlib. Questo è un livello un po 'più basso e prende meno decisioni rispetto a Xlib. Da quello che ho capito, il risultato è una performance potenzialmente migliore a causa del maggior potenziale di asincronismo, ma dovrei avvertire che non ho mai lavorato con esso.
7
  • che è la lingua migliore per fare questo?

    Qualunque sia la vostra comodità. Ci sono molti esempi di gestori di finestre di successo in molte lingue diverse là fuori. Qtile e xmonad sono buoni esempi, scritti rispettivamente in Python e Haskell.

  • Dove trovare alcune risorse da apprendere?

    Vorrei andare a guardare alcuni dei gestori di finestre esistenti. Ce ne sono molti, quindi almeno alcuni di loro devono avere un codice leggibile. Ecco lo Comprehensive List of Window Managers for Unix.

25

il tinywm in C può essere utile per iniziare.

7

So che questo argomento è un po 'vecchio, ma mi stavo chiedendo la stessa cosa. Questo gestore di finestre chiamato i3 sembra un buon modo per imparare da troppo.