Sorry, this documentation is pretty out of date - and applies
to perlwm 0.0.1.
There are currently a handful of configuration variables that you
can change (althought they are not yet in a seperate configuration file).
They control things like fonts, colors, and the
combinations in which they are used, as well as actions and bindings.
%font - this defines the fonts that will be used. It maps a name
to a font definition.
%font = (title => 'lucidasans-14',
title_focus => 'lucidasans-bold-14');
%color - this defines the colors that will be used. It maps a name
to a color definition.
%color = (frame => 'grey75',
frame_focus => 'white',
title => 'black',
title_focus => 'red');
%gc - this defines the GCs (graphics contexts) that will be used to
draw various elements. It maps names to GC attributes - fonts and colors
used must be in defined in %font or %color. GCs are cached (as are fonts and
colors). (Currently, the value of this variable looks a bit redundant, but
in future it should become more useful.)
%gc = (frame => { foreground => 'frame' },
frame_focus => { foreground => 'frame_focus' },
title => { font => 'title',
foreground => 'title' },
title_focus => { font => 'title_focus',
foreground => 'title_focus' });
%dim - this defines various dimensions.
%dim = (frame_width => 2);
%actions - this defines 'actions' (perhaps 'functions' might be a
better term). They define what piece of code gets executed for a particular
event (press, drag and release).
%actions = (move => { drag => \&move_drag },
size => { press => \&size_press, drag => \&size_drag });
%bindings - this defines how buttons (and in the future keys) are
bound to actions in various contexts.
%bindings = (frame => { 'Button1' => 'move' },
window => { 'Mod1 Button1' => 'move',
'Control Mod1 Button1' => 'size',
'Button1' => '+click' });
Sample action code. Here is the code needed to define the 'move'
action. It will be called during a drag (after an appropriate binding has been
triggered). The three parameters are $c (client - describes the window),
$s (state - describes the current action state) and $e (event - the most
recent X event). What this function does is move the current window
my the incremental amount the mouse moved since the last event. This
configuration gives us what is usually called 'opaque move' - the whole window
will move with the mouse. Other behaviour can be easily achieved by handling
just the press and release, or handling the drag differently.
sub move_drag {
my($c, $s, $e) = @_;
$c->{x} += $s->{drag}->{inc_x};
$c->{y} += $s->{drag}->{inc_y};
$x->ConfigureWindow($c->{frame}, x => $c->{x}, y => $c->{y});
}
|