
Hi! On Tue, Aug 25, 2009 at 05:17:00AM -0400, gwern0@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_zwischenvortr... - 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