2010-08-12 3 views
22

Ich möchte einen einfachen Stacking-Fenster-Manager (in C) für den privaten Gebrauch erstellen, vor allem für den Zweck des Lernens und Herausfordern mich.Erstellen eines Fenstermanagers für Linux

Ich habe durchgesehen twm 's Quellcode, der relativ wenig Schnickschnack hat, aber es scheint sehr niedrigen Pegel, da es nicht auf einem Widget Toolkit basiert. 1 Wäre ein Toolkit wie GTK + vorzuziehen? Ich fürchte, dass einige der Code und Bibliotheken in twm möglicherweise zu antiquiert sind (edit: veraltet) und ich möchte der Fenstermanager relativ moderne Bibliotheken verwenden. Zum Verständnis wäre ich auch an Vorschlägen interessiert, wie man einen Fenstermanager von Grund auf neu startet - zu diesem Zweck gibt es nicht viele Tutorials.

Update: Für diejenigen denken ähnlicher Projekte: Ich landete Common Lisp verwenden und die CLX library. tinywm-lisp diente als Basis und die brillanten CLFSWM und Stumpwm waren eine große Hilfe. Als Referenz habe ich die (PDF Warnung) und #xlib auf Freenode verwendet.

+0

Widgets leben im Grunde in Windows, also kann das meiste, was ein Fenstermanager tut, nicht von Widgets abhängen. –

+0

Ich dachte schon, deshalb habe ich Wikipedia darauf hingewiesen; "[Twm] ist in C direkt gegen Xlib geschrieben und nicht auf Basis eines Widget-Toolkits." Ich nahm an, dass moderne Fenstermanager auf Widget-Toolkits basierten. –

+4

Aus irgendeinem Grund erinnerte mich diese Frage an [diese] (http://www.art.net/~hopkins/Don/unix-haters/x-windows/disaster.html) ... –

Antwort

20

Was auch immer Sie tun, verwenden XCB und nicht Xlib. Es ist modern, asynchron, einfacher und gibt Ihnen direkten Zugriff auf das X11-Protokoll.

+3

Das war einer der Gründe, warum ich gefragt habe! 'Quinmars' empfohlen Ich benutze' Xlib', welches die meisten Fensterverwalter zu benutzen scheinen, ich habe keine Fenstermanager gesehen, die 'XCB' benutzen (außer Awesome) - ist das nur, weil alle anderen Fenstermanager alt sind oder gibt es einen Grund, 'XCB' heutzutage zu verwenden, wenn man von vorne anfängt? Der 'Xlib'-Code in' twm' funktioniert immer noch ungefähr zwanzig Jahre später mit der neuesten Version von Xorg - wird 'XCB'-Code noch in dieser Zeit funktionieren? –

+2

Um anderen Leuten zu helfen, die daran interessiert sind, dasselbe zu tun, würde ich das 'mcwm' (http://hack.org/mc/hacks/mcwm/) empfehlen, das vollständig auf' XCB' basiert. –

+2

@Baldur: Dieser Beitrag ist ziemlich alt, aber ich bin jetzt in XCB. Die Dokumentation ist sehr unvollständig, aber die API ist sehr transparent und bildet XLib-Konzepte eng ab, so dass es kein wirkliches Problem ist. Ich empfehle von ganzem Herzen, dass Sie sich den Quellcode von awesome anschauen (ich lerne xcb durch super persönlich). Es verdient seinen Namen. –

6

Ein sehr minimalistisches WM ist wm2. Ich habe den Quellcode nicht gelesen und weiß daher nicht, ob es ein Lehrbeispiel ist. Natürlich können Sie Bibliotheken verwenden, die bereits viel von der Abstraktion und Zeichnung für Sie arbeiten, wie gdk und gtk. Aber da dieses Projekt nur für das persönliche Lernen gedacht ist, würde ich den harten Weg gehen und Xlib direkt verwenden.

Hier sind einige Links, die Ihnen nützlich sein könnten:

+0

Ich werde Xlib verwenden dann. Kennen Sie Fenstermanager, die etwas wie GTK + für "Abstraktions- und Zeichenarbeiten" verwenden? –

+0

Serge empfiehlt die Verwendung von XCB –

+0

AFAIK, die API von xcb ist noch nicht stabil, da Sie nicht planen, Ihre WM jemals zu veröffentlichen, sollte dies kein Show-Stopper sein. – quinmars

0

Xmonad könnte ein guter Anfang sein.

+0

Xmonad ist in Haskell geschrieben, op wollte C. verwenden – solusipse

2

Aus Gründen der Verständigung in Vorschläge, die ich auch interessieren würde, wie ein Fenstermanager

von Grund auf neu starten

Möglicherweise möchten Sie am aewm Window-Manager einen Blick haben. Der Code ist klein und es macht die Grundlagen ziemlich gut. Es ist in C geschrieben und verwendet Xlib.

http://www.red-bean.com/decklin/aewm/

5

Werfen Sie einen Blick auf den Code für dwm. Die Codebasis ist schön und leicht zu verstehen. Die ganze Sache ist ungefähr 2000 Zeilen.

3

Ich habe eine eingehende Tutorial-Serie geschrieben, die zeigt, wie ein X11-Fenster-Manager in C++ schreiben:

Darüber hinaus können Sie ein einfaches Beispiel überprüfen können window-Manager, basic_wm, bei

Es ist stark für pädagogische Zwecke kommentiert.

Auf Xlib vs XCB - Ich würde Xlib über XCB empfehlen, wenn Sie zuerst starten. XCB ist effizienter, aber es ist viel mehr Low-Level und viel ausführlicher (denke Assemblersprache für die GUI). Sie wollen sich nicht mit voreiligen Optimierungen belasten, bis Sie bereits einen Prototypen haben.