Re: [dev] Binary Space Partitioning Window Manager

From: <chisel_AT_gmail.com>
Date: Sun, 5 Aug 2012 07:51:43 -0400

I have a wm which organizes windows into a tree, with windows as leaves,
and 'containers' as inner nodes. a screen can be attached to any node,
and displays the subtree rooted there. If the subtree is a leaf, the
window is fullscreen, otherwise, a few windows and containers are
displayed simultaneously.

I thought this would be nice both conceptually (since it generalizes
many other windowing paradigms) and organizationally (I could group
things into meaningful hierarchies).

In reality, it seems all this extra complication required some nice
tools to go along with it (to organize the trees, show minified windows,
etc), but this was all a lot more effort. Consequently, I was left with
something more unwieldy. Next time I write a wm, I'm going to try
a concept which is simple to implement, and most window operations
require just a few keystrokes (the arbitrary depth tree traversals
violated the 'few').

just saw thoughts, lest you waste time down similar paths (in the
tree..).

On Sat, Jul 28, 2012 at 10:47:58AM +0200, Bastien Dejean wrote:
> Hi,
>
> I'm planning on writing a window manager with the following
> characteristics:
>
> - Windows are represented as the leaves of a binary tree.
> - To each leaf corresponds exactly one window.
> - The only nodes which can be focused are the leaves.
> - The leaves are called *window nodes*.
> - The other nodes are called *container nodes*.
> - Only two methods of node insertion will be provided: *replace* and *pair*.
>
> Example: insertion of a new node (number 4) into the given tree with the
> *replace* method:
>
> b c
> / \ / \
> 3 a --> 4 b
> ^ / \ ^ / \
> 2 1 3 a
> / \
> 2 1
>
> +-------------------------+ +-------------------------+
> | | | | | |
> | | 2 | | | 3 |
> | | | | | |
> | 3 |------------| --> | 4 |------------|
> | ^ | | | ^ | | |
> | | 1 | | | 2 | 1 |
> | | | | | | |
> +-------------------------+ +-------------------------+
>
> And with the *pair* method:
>
> b b
> / \ / \
> 3 a --> c a
> ^ / \ / \ / \
> 2 1 4 3 2 1
> ^
>
> +-------------------------+ +-------------------------+
> | | | | | |
> | | 2 | | 4 | 2 |
> | | | | ^ | |
> | 3 |------------| --> |------------|------------|
> | ^ | | | | |
> | | 1 | | 3 | 1 |
> | | | | | |
> +-------------------------+ +-------------------------+
>
> - Each container node is a split rectangle.
> - The splitting method of a container node is either *automatic* or *manual*.
> - In the *automatic* splitting mode, the split type is vertical if the width of
> the rectangle of the node is greater that its height and horizontal
> otherwise.
> - Several tree transformations will be provided: directional leaf swap, node
> pulling, rotation, contraction, dilatation...
>
> Greetings,
> --
> b.d
> (| |)
> ^ ^
>
Received on Sun Aug 05 2012 - 13:51:43 CEST

This archive was generated by hypermail 2.3.0 : Sun Aug 05 2012 - 14:00:06 CEST