[xmonad] Bluetile

Jan Vornberger Jan.Vornberger at Informatik.Uni-Oldenburg.DE
Tue Aug 25 19:09:11 EDT 2009


Hi!

On Tue, Aug 25, 2009 at 05:17:00AM -0400, gwern0 at gmail.com wrote:
> Jan later [wrote](http://article.gmane.org/gmane.comp.lang.haskell.xmonad/7495) that
> 
> >"@Don: I will definitely try to contribute back changes and improvements, if I can. Once I start implementing I will also make my repository available for others to try out. Thx for offering assistance, I might come back to that later."
> 
> But given that Bluetile has been done a while, I guess we'll just have to content ourselves with the repos.

I'm here, I'm here! :-) And the statement about trying to contribute
changes back is still true. The Bluetile project isn't done yet. The
code is (as far as the school project is concerned), but the
accompanying paper isn't, so that's why I didn't have time to submit
patches yet.

But thanks anyway for having a look at my code! That's a pretty good
overview. I'll comment on a few things:

> - A PDF presentation of some sort is available at http://parsys.informatik.uni-oldenburg.de/theses/docs/bluetile_zwischenvortrag.pdf
>     - Google Translate link, may or may not work: http://translate.google.com/translate?hl=en&sl=de&u=http://parsys.informatik.uni-oldenburg.de/theses/docs/bluetile_zwischenvortrag.pdf

That presentation was at the beginning of my project, describing what I
was planning to do.

> The actual code seems to be broken up into 4 packages; everything is BSD3 so no concerns about reuse:
> 
> - bluetilutils: http://hackage.haskell.org/package/bluetileutils (Darcs repo: http://tuvok.home.dyndns.org/bluetile-repos/bluetileutils down?)
>     A package of 3 Gtk2hs executables:
>       i. bluetiledock
>       ii. bluetilemockwin
>       iii. bluetilegreet
> - xmonad-bluetilebranch: http://hackage.haskell.org/package/xmonad-bluetilebranch (I have no local repo for this, although it was presumably at http://tuvok.home.dyndns.org/bluetile-repos/xmonad-bluetilebranch )
> - xmonad-contrib-bluetilebranch: http://hackage.haskell.org/package/xmonad-contrib-bluetilebranch (same comment for repo)
> - bluetile: http://hackage.haskell.org/package/bluetile (repo: http://tuvok.home.dyndns.org/bluetile-repos/bluetile )

All the repositories can now be found at http://code.haskell.org/bluetile/ .

> Now, looking at the code (bearing in mind I am only reading and haven't compiled/run anything yet):
> 
> # bluetileutils
> ## bluetiledock
> 
> This creates a minimalistic strut app. It supports 14 buttons/commands:
> 
> - switch to workspaces 0-9
> - 4 commands to switch to floating/tiled1/tiled2/fullscreen (presumably tiled1 and tiled2 = 2 windows each on 1/2 screen split horizontal & vertical)
> 
> Interesting is how bluetiledock achieves this functionality, how it
> makes xmonad actually do something - it seems to be using a X-based
> method of IPC, in which a integer is stored in an X atom and xmonad
> then grabs it and does something with it:

As Daniel pointed out, this is based on the ServerMode code in contrib.

> ## bluetilemockwin
> 
> No idea. It creates some sort of widget with the RGB color specified
> as 3 ints. Grep doesn't seem to show up any use in the main bluetile
> repo.

This is used by the greeter as part of the quickstart tutorial. It let's
you open two windows - one red, one blue - and gives you some
instructions how to tile. I find using these windows, the effects of the
different tiling algorithms can be seen nicely.

> # xmonad-contrib-bluetilebranch
> 
> Without a repo, it's hard to know exactly what's changed. But by my count, this XMC fork adds the following modules:

It has been a while since I merged new patches from XMC back into my
repo. So by now, there are probably some conflicts. I will try to look
into this in the next days.

> - XMonad.Hooks.WorkspaceByPos
>     No idea. What I did notice is that it looks like it could use the Maybe monad!

WorkspaceByPos is only useful in dual-head setups. If you open a new
window it looks at the position where it wants to go and moves it to the
correct workspace - as opposed to just assigning it to the active
workspace. That's also very helpful when starting up in a dual-head
setup. If you already have windows open and then start Bluetile, they
are correctly assigned to the two visible workspaces, instead of all
being moved onto one workspace.

> - XMonad.Layout.BorderResize
> - XMonad.Layout.DecorationUtils
>     Support for the BorderResize?

I had to move some code from X.L.Decoration to DecorationUtils because
of a circular dependency I was running in. My decoration uses
WindowMenu, which uses GridSelect, which in turn imported stuff from
Decoration. I moved that stuff out into DecorationUtil, so that
GridSelect can only import DecorationUtil.

However, the whole Decoration stuff is probably the one thing, which
will be fairly hard to merge. I hacked it quite a bit to make it work
better in a dual-head setup. It's also fairly Bluetile-specific right
now. So maybe it's better if I copy it over into a new module and leave
the old decoration as it is, for people that use it in the current form.
Or maybe it can be made more modular, so that it supports both the old
version as well as the Bluetile-specific stuff.

> - XMonad.Layout.WindowSwitcherDecoration
>    looks like a module to use a mouse to 'drag' a window onto another and swap their positions

That's correct.

> So to conclude this whirlwind tour: I see a lot of valuable stuff.

Glad to hear that! :-)

Regards!

Jan


More information about the xmonad mailing list