7.7. Window Manager Button Customisation   

The following frame shows the button bindings of the SG 4Dwmrc file.

The first entry -

      <Btn1Click>        frame           f.raise

indicates that when a Btn1Click is detected and the cursor is
over the frame of a window then the f.raise event will be invoked.
     Shift Ctrl<Btn1Down>    window          f.raise_resize

indicates that when the Shift and Control keys are pressed and
Button number 1 is down and the cursor is inside a window then the f.raise_resize event is invoked. And so on.

As mentioned previously, this file contains a definition for the button bindings specified in the ".Xdefaults" file: 4Dwm*buttonBindings: myButtonBindings


 
A two buttoned mouse
Fig. 7.1 : A two buttoned mouse
     
A left and a right handed three buttoned mouse
Fig. 7.2 : A left and a right handed three buttoned mouse
    ############################################################################

#
# Button Binding Description
#
# The syntax for this type of structure is as follows:
#
# buttons bindings_set_name
# {
# button context function
# :
# button context function
# }
#
# The syntax for the context specification is
#
# context = object[|context]
# object = root | icon | window | title | frame | border | app
#
# The context specification indicates where the mouse cursor must be for the
# button binding to be effective. For example, a context of `window' indicates
# that the pointer must be over a client window or window manager frame for
# the button binding to be effective. The `frame' context is for the window
# manager frame around a client window (including the border and titlebar),
# the `border' context is for the border part of the window manager frame
# (not including the titlebar), the `title' context is for the title area of
# the window manager frame, and the `app' context is for the application window
# (not including the window manager frame).
#
# If a function is specified in a type of resource where it is not supported
# or is invoked in a context that does not apply, the function is treated as
# f.nop (no operation is performed).
#
############################################################################
#####################################################################
#
# The following button bindings override the 4DwmButtonBindings located in the
# /usr/lib/X11/system.4Dwmrc file.
# myButtonBindings is defined to be the current resource for button bindings in the
# $HOME/.Xdefaults file of the ~4Dgifts directory.
#
buttons myButtonBindings
{
<Btn1Click> frame f.raise
<Btn1Click> icon f.normalize
Ctrl<Btn1Down> frame|icon f.lower
Shift<Btn1Down> frame|icon f.raise
Shift Ctrl<Btn1Down> window f.raise_resize
<Btn2Down> frame|icon f.move
Ctrl<Btn2Down> frame|icon f.lower
Shift<Btn2Down> frame|icon f.raise
Shift Ctrl<Btn2Down> window f.raise_move
<Btn3Down> frame|icon f.post_wmenu
Ctrl<Btn3Down> frame|icon f.post_wmenu
Shift<Btn3Down> frame|icon f.post_wmenu
Meta<Btn3Down> window|icon f.post_wmenu
Shift Ctrl<Btn3Down> window f.post_wmenu
<Btn1Down> root f.menu clients
<Btn2Down> root f.menu hosts
<Btn3Down> root f.menu rootMenu
# Exercise extensive care when binding things to the meta key.
# this can be costly to emacs and other applications see below.
Meta<Btn1Down> frame f.raise_lower
Meta<Btn2Down> frame f.move
# Here is how to make an emacs user grumpy.
# Meta<Btn1Down> window f.raise_lower
# Meta<Btn2Down> window f.move
Meta<Btn1Down> window f.minimize
}