From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: mark@markwitmer.com Newsgroups: gmane.lisp.guile.user Subject: [ANN] Guile-WM 0.1/Guile XCB 1.1 Date: Sun, 25 Aug 2013 03:30:27 -0400 Message-ID: <87eh9iw7l8.fsf@markwitmer.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1377329498 5129 80.91.229.3 (24 Aug 2013 07:31:38 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 24 Aug 2013 07:31:38 +0000 (UTC) To: guile-user@gnu.org Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Sat Aug 24 09:31:40 2013 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VD8Jr-0003h6-Ny for guile-user@m.gmane.org; Sat, 24 Aug 2013 09:31:35 +0200 Original-Received: from localhost ([::1]:40679 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VD8Jq-0002tT-NQ for guile-user@m.gmane.org; Sat, 24 Aug 2013 03:31:34 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:36111) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VD8Je-0002tL-89 for guile-user@gnu.org; Sat, 24 Aug 2013 03:31:27 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VD8JZ-0003k8-6L for guile-user@gnu.org; Sat, 24 Aug 2013 03:31:22 -0400 Original-Received: from mail-ie0-f175.google.com ([209.85.223.175]:40256) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VD8JY-0003jz-Vx for guile-user@gnu.org; Sat, 24 Aug 2013 03:31:17 -0400 Original-Received: by mail-ie0-f175.google.com with SMTP id u16so2151180iet.6 for ; Sat, 24 Aug 2013 00:31:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-type:content-transfer-encoding; bh=+4rqdO5YoawNSDuIRpnBZmk1L2I3E2p8NLdTixtN3Hw=; b=c8FYW1xJdmFUGOgqhqR3oPjAccpehK/hIe09Jxgl0u6ajJnbAsw5ruG/qdMxmsa0/D 7pt4XkQu6jS7ot2cMrR98wg39DcE380YwP4HzG/CX81DxvA1gEP7bpdt+W+5Z2ZFl9S0 yhiTYUoJHVGEdiJwYl1Mi7URwOrTlzBbBZX6llHvsvbxzOdC2dNZeOZZEF5HMiiI1elJ blNj3EA96h5h0SYK6lt8YAIXA8E141P15HIPLMRRIKyZaKgJPbS25DrV7EQYBzFn6dIo LInbiOZw1X/lL9ZN684kbePwcMODAAkwBi1SHLpHF2ip5JQQGEO5+03OKRFbQ/jA2S7z 7TnQ== X-Gm-Message-State: ALoCoQk4aU1T0XfM0Kpf7T3VJYSNGYz/e/DisW35bQt2eCk9rIN8lvN9BE2Ul6uCeH/BeTYZxVnU X-Received: by 10.50.49.14 with SMTP id q14mr691569ign.2.1377329475689; Sat, 24 Aug 2013 00:31:15 -0700 (PDT) Original-Received: from localhost (cpe-184-58-115-186.woh.res.rr.com. [184.58.115.186]) by mx.google.com with ESMTPSA id ir7sm3066665igb.8.1969.12.31.16.00.00 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Sat, 24 Aug 2013 00:31:15 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.223.175 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.user:10680 Archived-At: Hi all, I feel like it's time to announce Guile-WM, my stab at an all-Guile Window Manager. It's actually more of a toolkit for writing X applications, with the window manager stuff being what's implemented so far. It includes live REPL support, the usual keymap/minibuffer/user-defined command paradigm, and more. I'll put the README at the end of the email. Archive: http://www.markwitmer.com/dist/guile-wm-0.1.tar.gz Git: http://github.com/mwitmer/guile-wm I've also dramatically revamped Guile XCB. Previously the variable names and symbols used came directly from the XML-XCB files, and they weren't very Scheme-y. I've normalized them to typical lowercase-dash-separated form. I also made the interface "smarter" so that the you don't have to deal with ugly details of the X protocol when it isn't absolutely necessary. On top of the core X protocol stuff, I added an optional (but highly recommended) event loop that uses delimited continuations to let you switch back and forth pretty seamlessly between your code and an X event loop. Archive: http://www.markwitmer.com/dist/guile-xcb-1.1.tar.gz Git: http://github.com/mwitmer/guile-xcb Feel free to share your ideas, questions, or comments! Thanks --=20 Mark Witmer =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2= =94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94= =81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81 GUILE-WM Mark Witmer mark@markwitmer.com =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2= =94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94= =81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81 Table of Contents =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80 1 Overview 2 Why? 3 What's Actually Implemented 4 What's Not Implemented .. 4.1 Wish List .. 4.2 Even Crazier Wish List 5 Sample 6 Installation and Prerequisites 1 Overview =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90 Guile-WM is a framework for creating an X window manager (or any other X application, really) and a set of useful modules designed for that purpose. Users are encouraged to pick and choose from ones presently available and contribute their own as well! Guile-WM relies /heavily/ on its user init file. In fact, it won't do anything on its own without one. The intention is to provide something 100% configurable. 2 Why? =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Guile Scheme is just so much fun to work with, I wanted to build my house out of it. (Also, StumpWM won't work in my Linux distribution right now. And I find LOOP macros unsettling for some reason.) I didn't want to build a WM on top of xlib. It's obsolete, or should be, anyway. XCB is great, and when I saw that it comes with XML files that describe the X protocol so that you can easily implement an X client in a different language, I decided to build the whole X client stack in Scheme. Why not? So I made Guile XCB. And then, finally, I got to work on this. 3 What's Actually Implemented =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90 =E2=80=A2 keymaps/minibuffer/user-defined commands: The usual emacs-style stuff. =E2=80=A2 tinywm-inspired window management: Though I do some reparenting= and highlight the focused window. =E2=80=A2 Built-in repl: make changes to the WM while it's running, talk = to the X server directly (if you're into that kind of thing), integrate with Geiser in Emacs, etc. (Note: if you call a procedure that talks to the X server, use the metacommand ,post to evalute the expression. That way it'll run inside the event loop on the other thread). =E2=80=A2 "icccm" support: Ha ha, not really, but I have a few bits and p= ieces implemented =E2=80=A2 And more! It's completely open, so you could implement whatever window-management paradigm you like. 4 What's Not Implemented =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 There's a lot more I'd like to do, but as you can see, it gets progressively more grandiose and, um=E2=80=A6 crazy, perhaps. 4.1 Wish List =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=80=A2 Command-line options. Mainly to let you pick a different init f= ile. =E2=80=A2 A more sophisticated tiling window manager algorithm =E2=80=A2 Some kind of window decoration =E2=80=A2 Built-in replacements for those little X utility programs (xmod= map, xsetbg, etc.) I did part of xrandr as a proof-of-concept. =E2=80=A2 A status bar/modeline type thing =E2=80=A2 Antialiased fonts! guile-pango would be good for this. =E2=80=A2 Whatever else you want=E2=80=A6 ideas (and implementations) wel= come. 4.2 Even Crazier Wish List =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80 =E2=80=A2 Implement enough of a widget toolkit to actually run Guile Emacs inside of Guile-WM all on Guile XCB. You would basically be running a Lisp-machine at that point and all of your friends will be jealous. =E2=80=A2 Add support for XInput2 to Guile XCB w/touch gestures and whatn= ot and build a hackable mobile device interface. Isn't it a tragedy that smartphones are becoming the most common type of computer, but you can't really hack on them? Real XCB doesn't support XInput2 yet, but we don't have to wait for them=E2=80=A6 =E2=80=A2 Build a WM on top of Wayland. That would require a Scheme Wayla= nd client, which could be built along the lines of Guile XCB, since the Wayland projects comes with the same kind of XML spec files that XCB uses. 5 Sample =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 An annotated sample init file is included with the distribution as "wm-init-sample.scm". It demonstrates how to set up the configurable values in the available modules. Copy it to ~/.guile-wm to try it out. 6 Installation and Prerequisites =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 You can use the typical ./configure, make, make install chain to build Guile-WM. Guile-WM requires Guile XCB and the latest release of Guile (2.0.9).