bspwm/bspwm.1
2013-06-24 22:53:00 +02:00

539 lines
15 KiB
Groff

.TH "bspwm" 1 "June 23, 2013" "Bspwm"
.SH NAME
bspwm - Tiling window manager based on binary space partitioning
.PP
.SH SYNOPSIS
.PP
\f[B]bspwm\f[] [\f[B]\-h\f[]|\f[B]\-v\f[]|\f[B]\-s\f[] \f[I]PANEL_FIFO\f[]|\f[B]\-p\f[] \f[I]PANEL_PREFIX\f[]]
.PP
\f[B]bspc\f[] \f[I]MESSAGE\f[] [\f[I]ARGUMENTS\f[]] [\f[I]OPTIONS\[]]
.SH DESCRIPTION
.PP
\f[B]bspwm\f[] is a tiling window manager that represents windows as the leaves of a full binary tree.
.PP
It is controlled and configured via \f[B]bspc\f[].
.SH CONFIGURATION
.PP
\f[B]bspwm\f[] have only two sources of informations: the X events it receives and the messages it reads on a dedicated socket.
.PP
Its configuration file is \f[I]$XDG_CONFIG_HOME/bspwm/autostart\f[].
.PP
Keyboard and pointer bindings are defined with sxhkd.
.PP
Example configuration files can be found in the \f[B]examples\f[] directory.
.SH SPLITTING MODES
.PP
There is only two splitting modes: \f[I]automatic\f[] and \f[I]manual\f[].
.PP
The default mode is \f[I]automatic\f[].
The \f[I]manual\f[] mode is entered by sending a \f[B]presel\f[] message.
.PP
Example: insertion of a new node (number 4) into the given tree in \f[I]automatic\f[] mode:
.IP
.nf
\f[C]
\ \ \ \ \ \ \ \ \ \ \ \ \ \ b\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ c
\ \ \ \ \ \ \ \ \ \ \ \ \ /\ \\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ /\ \\
\ \ \ \ \ \ \ \ \ \ \ \ 3\ \ \ a\ \ \ \ \ \ \ \ \ \ \ \ \ \ \-\->\ \ \ \ \ \ \ \ \ \ \ \ \ \ 4\ \ \ b
\ \ \ \ \ \ \ \ \ \ \ \ ^\ \ /\ \\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ^\ \ /\ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ 2\ \ \ 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 3\ \ \ a
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ /\ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 2\ \ \ 1
\ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\ \ \ \ \ \ \ \ \ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
\ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |
\ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ 2\ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ 3\ \ \ \ \ \ |
\ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |
\ |\ \ \ \ \ 3\ \ \ \ \ \ |\-\-\-\-\-\-\-\-\-\-\-\-|\ \ \ \-\->\ \ \ |\ \ \ \ \ 4\ \ \ \ \ \ |\-\-\-\-\-\-\-\-\-\-\-\-|
\ |\ \ \ \ \ ^\ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ ^\ \ \ \ \ \ |\ \ \ \ \ |\ \ \ \ \ \ |
\ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ 1\ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ 1\ \ |\ \ 2\ \ \ |
\ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ |\ \ \ \ \ \ |
\ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\ \ \ \ \ \ \ \ \ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
\f[]
.fi
.PP
Same departure, but the mode is \f[I]manual\f[], and a \f[B]presel\f[] \f[I]up\f[] message was sent beforehand:
.IP
.nf
\f[C]
\ \ \ \ \ \ \ \ \ \ \ \ \ b\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ b
\ \ \ \ \ \ \ \ \ \ \ \ /\ \\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ /\ \\
\ \ \ \ \ \ \ \ \ \ \ 3\ \ \ a\ \ \ \ \ \ \ \ \ \ \ \ \ \ \-\->\ \ \ \ \ \ \ \ \ \ \ \ \ \ c\ \ \ a
\ \ \ \ \ \ \ \ \ \ \ ^\ \ /\ \\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ /\ \\\ /\ \\
\ \ \ \ \ \ \ \ \ \ \ \ \ 2\ \ \ 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 4\ \ 3\ 2\ \ 1
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ^
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\ \ \ \ \ \ \ \ \ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
|\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |
|\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ 2\ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ 4\ \ \ \ \ \ |\ \ \ \ \ 2\ \ \ \ \ \ |
|\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ ^\ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |
|\ \ \ \ \ 3\ \ \ \ \ \ |\-\-\-\-\-\-\-\-\-\-\-\-|\ \ \ \-\->\ \ \ |\-\-\-\-\-\-\-\-\-\-\-\-|\-\-\-\-\-\-\-\-\-\-\-\-|
|\ \ \ \ \ ^\ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |
|\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ 1\ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ 3\ \ \ \ \ \ |\ \ \ \ \ 1\ \ \ \ \ \ |
|\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ |
+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\ \ \ \ \ \ \ \ \ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
\f[]
.fi
.SH CONTAINERS
.PP
Each monitor contains at least one desktop.
.PP
Each desktop contains at most one tree.
.SH MESSAGES
.TP
.B \f[B]get\f[] \f[I]SETTING\f[]
Return the value of the given setting.
.RS
.RE
.TP
.B \f[B]set\f[] \f[I]SETTING\f[] \f[I]VALUE\f[]
Set the value of the given setting.
.RS
.RE
.TP
.B \f[B]list\f[] [\f[I]DESKTOP_NAME\f[]]
Output the internal representation of the window tree.
.RS
.RE
.TP
.B \f[B]list_desktops\f[] [\f[B]\-\-quiet\f[]]
Perform a dump of each desktop for the current monitor.
.RS
.RE
.TP
.B \f[B]list_monitors\f[] [\f[B]\-\-quiet\f[]]
Perform a dump of each monitor.
.RS
.RE
.TP
.B \f[B]list_history\f[]
Return the node focus history of each desktop.
.RS
.RE
.TP
.B \f[B]list_windows\f[]
Return the list of managed windows (i.e.
their identifiers).
.RS
.RE
.TP
.B \f[B]list_rules\f[]
Return the list of rules.
.RS
.RE
.TP
.B \f[B]presel\f[] \f[I]left\f[]|\f[I]right\f[]|\f[I]up\f[]|\f[I]down\f[] [\f[I]SPLIT_RATIO\f[]]
Switch to manual mode and select the splitting direction.
.RS
.RE
.TP
.B \f[B]cancel\f[]
Switch to automatic mode.
.RS
.RE
.TP
.B \f[B]ratio\f[] \f[I]VALUE\f[]
Set the splitting ratio of the focused window.
.RS
.RE
.TP
.B \f[B]pad\f[] \f[I]MONITOR_NAME\f[] [\f[I]TOP_PADDING\f[] [\f[I]RIGHT_PADDING\f[] [\f[I]BOTTOM_PADDING\f[] [\f[I]LEFT_PADDING\f[]]]]]
Set the padding of the given monitor.
.RS
.RE
.TP
.B \f[B]focus\f[] \f[I]left\f[]|\f[I]right\f[]|\f[I]up\f[]|\f[I]down\f[]
Focus the neighbor window situated in the given direction.
.RS
.RE
.TP
.B \f[B]shift\f[] \f[I]left\f[]|\f[I]right\f[]|\f[I]up\f[]|\f[I]down\f[]
Exchange the current window with the given neighbor.
.RS
.RE
.TP
.B \f[B]swap\f[] [\f[B]\-\-keep\-focus\f[]]
Swap the focused window with the last focused window.
.RS
.RE
.TP
.B \f[B]push\f[] \f[I]left\f[]|\f[I]right\f[]|\f[I]up\f[]|\f[I]down\f[]
Push the fence located in the given direction.
.RS
.RE
.TP
.B \f[B]pull\f[] \f[I]left\f[]|\f[I]right\f[]|\f[I]up\f[]|\f[I]down\f[]
Pull the fence located in the given direction.
.RS
.RE
.TP
.B \f[B]fence_ratio\f[] \f[I]left\f[]|\f[I]right\f[]|\f[I]up\f[]|\f[I]down\f[]
Set the splitting ratio of the fence located in the given direction.
.RS
.RE
.TP
.B \f[B]cycle\f[] \f[I]next\f[]|\f[I]prev\f[] [\f[B]\-\-skip\-floating\f[]|\f[B]\-\-skip\-tiled\f[]|\f[B]\-\-skip\-class\-equal\f[]|\f[B]\-\-skip\-class\-differ\f[]]
Focus the next or previous window matching the given constraints.
.RS
.RE
.TP
.B \f[B]nearest\f[] \f[I]older\f[]|\f[I]newer\f[] [\f[B]\-\-skip\-floating\f[]|\f[B]\-\-skip\-tiled\f[]|\f[B]\-\-skip\-class\-equal\f[]|\f[B]\-\-skip\-class\-differ\f[]]
Focus the nearest window matching the given constraints.
.RS
.RE
.TP
.B \f[B]biggest\f[]
Return the ID of the biggest tiled window.
.RS
.RE
.TP
.B \f[B]circulate\f[] \f[I]forward\f[]|\f[I]backward\f[]
Circulate the leaves in the given direction.
.RS
.RE
.TP
.B \f[B]grab_pointer\f[] \f[I]focus\f[]|\f[I]move\f[]|\f[I]resize_side\f[]|\f[I]resize_corner\f[]
Begin the specified pointer action.
.RS
.RE
.TP
.B \f[B]track_pointer\f[] \f[I]ROOT_X\f[] \f[I]ROOT_Y\f[]
Pass the pointer root coordinates for the current pointer action.
.RS
.RE
.TP
.B \f[B]ungrab_pointer\f[]
End the current pointer action.
.RS
.RE
.TP
.B \f[B]toggle_fullscreen\f[]
Toggle the fullscreen state of the current window.
.RS
.RE
.TP
.B \f[B]toggle_floating\f[]
Toggle the floating state of the current window.
.RS
.RE
.TP
.B \f[B]toggle_locked\f[]
Toggle the locked state of the current window (locked windows will not respond to the \f[B]close\f[] message).
.RS
.RE
.TP
.B \f[B]toggle_visibility\f[]
Toggle the visibility of all the managed windows.
.RS
.RE
.TP
.B \f[B]close\f[]
Close the focused window.
.RS
.RE
.TP
.B \f[B]kill\f[]
Kill the focused window.
.RS
.RE
.TP
.B \f[B]send_to\f[] \f[I]DESKTOP_NAME\f[] [\f[B]\-\-follow\f[]]
Send the focused window to the given desktop.
.RS
.RE
.TP
.B \f[B]drop_to\f[] \f[I]next\f[]|\f[I]prev\f[] [\f[B]\-\-follow\f[]]
Send the focused window to the next or previous desktop.
.RS
.RE
.TP
.B \f[B]send_to_monitor\f[] \f[I]MONITOR_NAME\f[] [\f[B]\-\-follow\f[]]
Send the focused window to the given monitor.
.RS
.RE
.TP
.B \f[B]drop_to_monitor\f[] \f[I]next\f[]|\f[I]prev\f[] [\f[B]\-\-follow\f[]]
Send the focused window to the next or previous monitor.
.RS
.RE
.TP
.B \f[B]use\f[] \f[I]DESKTOP_NAME\f[]
Select the given desktop.
.RS
.RE
.TP
.B \f[B]use_monitor\f[] \f[I]MONITOR_NAME\f[]
Select the given monitor.
.RS
.RE
.TP
.B \f[B]alternate\f[]
Alternate between the current and the last focused window.
.RS
.RE
.TP
.B \f[B]alternate_desktop\f[]
Alternate between the current and the last focused desktop.
.RS
.RE
.TP
.B \f[B]alternate_monitor\f[]
Alternate between the current and the last focused monitor.
.RS
.RE
.TP
.B \f[B]add\f[] \f[I]DESKTOP_NAME\f[] ...
Make new desktops with the given names.
.RS
.RE
.TP
.B \f[B]add_in\f[] \f[I]MONITOR_NAME\f[] \f[I]DESKTOP_NAME\f[] ...
Make new desktops with the given names in the given monitor.
.RS
.RE
.TP
.B \f[B]rename_monitor\f[] \f[I]CURRENT_NAME\f[] \f[I]NEW_NAME\f[]
Rename the monitor named \f[I]CURRENT_NAME\f[] to \f[I]NEW_NAME\f[].
.RS
.RE
.TP
.B \f[B]rename\f[] \f[I]CURRENT_NAME\f[] \f[I]NEW_NAME\f[]
Rename the desktop named \f[I]CURRENT_NAME\f[] to \f[I]NEW_NAME\f[].
.RS
.RE
.TP
.B \f[B]remove_desktop\f[] \f[I]DESKTOP_NAME\f[] ...
Remove the given desktops.
.RS
.RE
.TP
.B \f[B]send_desktop_to\f[] \f[I]MONITOR_NAME\f[] [\f[B]\-\-follow\f[]]
Send the current desktop to the given monitor.
.RS
.RE
.TP
.B \f[B]cycle_monitor\f[] \f[I]next\f[]|\f[I]prev\f[]
Select the next or previous monitor.
.RS
.RE
.TP
.B \f[B]cycle_desktop\f[] \f[I]next\f[]|\f[I]prev\f[] [\f[B]\-\-skip\-free\f[]|\f[B]\-\-skip\-occupied\f[]]
Select the next or previous desktop.
.RS
.RE
.TP
.B \f[B]layout\f[] \f[I]monocle\f[]|\f[I]tiled\f[] [\f[I]DESKTOP_NAME\f[] ...]
Set the layout of the given desktops (current if none given).
.RS
.RE
.TP
.B \f[B]cycle_layout\f[]
Cycle the layout of the current desktop.
.RS
.RE
.TP
.B \f[B]rotate\f[] \f[I]clockwise\f[]|\f[I]counter_clockwise\f[]|\f[I]full_cycle\f[]
Rotate the window tree.
.RS
.RE
.TP
.B \f[B]flip\f[] \f[I]horizontal\f[]|\f[I]vertical\f[]
Flip the window tree.
.RS
.RE
.TP
.B \f[B]balance\f[]
Adjust the split ratios so that all windows occupy the same area.
.RS
.RE
.TP
.B \f[B]rule\f[] \f[I]PATTERN\f[] [\f[I]DESKTOP_NAME\f[]] [\f[I]floating\f[]] [\f[I]follow\f[]]
Create a new rule (\f[I]PATTERN\f[] must match the class or instance name).
.RS
.RE
.TP
.B \f[B]remove_rule\f[] \f[I]UID\f[] ...
Remove the rules with the given \f[I]UID\f[]s.
.RS
.RE
.TP
.B \f[B]put_status\f[]
Output the current state to the panel fifo.
.RS
.RE
.TP
.B \f[B]adopt_orphans\f[]
Manage all the unmanaged windows remaining from a previous session.
.RS
.RE
.TP
.B \f[B]restore_layout\f[] \f[I]FILE_PATH\f[]
Restore the layout of each desktop from the content of \f[I]FILE_PATH\f[].
.RS
.RE
.TP
.B \f[B]restore_history\f[] \f[I]FILE_PATH\f[]
Restore the history of each desktop from the content of \f[I]FILE_PATH\f[].
.RS
.RE
.TP
.B \f[B]quit\f[] [\f[I]EXIT_STATUS\f[]]
Quit.
.RS
.RE
.SH SETTINGS
.PP
Colors are either X color names or \f[I]#RRGGBB\f[], booleans are \f[I]true\f[] or \f[I]false\f[].
.PP
All the boolean settings are \f[I]false\f[] by default.
.TP
.B \f[I]focused_border_color\f[]
Color of the border of a focused window of a focused monitor.
.RS
.RE
.TP
.B \f[I]active_border_color\f[]
Color of the border of a focused window of an unfocused monitor.
.RS
.RE
.TP
.B \f[I]normal_border_color\f[]
Color of the border of an unfocused window.
.RS
.RE
.TP
.B \f[I]presel_border_color\f[]
Color of the \f[B]presel\f[] message feedback.
.RS
.RE
.TP
.B \f[I]focused_locked_border_color\f[]
Color of the border of a focused locked window of a focused monitor.
.RS
.RE
.TP
.B \f[I]active_locked_border_color\f[]
Color of the border of a focused locked window of an unfocused monitor.
.RS
.RE
.TP
.B \f[I]normal_locked_border_color\f[]
Color of the border of an unfocused locked window.
.RS
.RE
.TP
.B \f[I]urgent_border_color\f[]
Color of the border of an urgent window.
.RS
.RE
.TP
.B \f[I]border_width\f[]
Window border width.
.RS
.RE
.TP
.B \f[I]window_gap\f[]
Value of the gap that separates windows.
.RS
.RE
.TP
.B \f[I]split_ratio\f[]
Default split ratio.
.RS
.RE
.TP
.B \f[I]top_padding\f[], \f[I]right_padding\f[], \f[I]bottom_padding\f[], \f[I]left_padding\f[]
Padding space added at the sides of the current monitor.
.RS
.RE
.TP
.B \f[I]wm_name\f[]
The value that shall be used for the \f[I]_NET_WM_NAME\f[] property of the root window.
.RS
.RE
.TP
.B \f[I]borderless_monocle\f[]
Remove borders for tiled windows in monocle mode.
.RS
.RE
.TP
.B \f[I]gapless_monocle\f[]
Remove gaps for tiled windows in monocle mode.
.RS
.RE
.TP
.B \f[I]focus_follows_pointer\f[]
Focus the window under the pointer.
.RS
.RE
.TP
.B \f[I]pointer_follows_monitor\f[]
When focusing a monitor, put the pointer at its center.
.RS
.RE
.TP
.B \f[I]adaptative_raise\f[]
Prevent floating windows from being raised when they might cover other floating windows.
.RS
.RE
.TP
.B \f[I]apply_shadow_property\f[]
Enable shadows for floating windows via the \f[I]_COMPTON_SHADOW\f[] property.
.RS
.RE
.TP
.B \f[I]auto_alternate\f[]
Interpret two consecutive identical \f[B]use\f[] messages as an \f[B]alternate\f[] message.
.RS
.RE
.TP
.B \f[I]focus_by_distance\f[]
Use window or leaf distance for focus movement.
.RS
.RE
.TP
.B \f[I]history_aware_focus\f[]
Give priority to the focus history when focusing nodes.
.RS
.RE
.SH ENVIRONMENT VARIABLES
.TP
.B \f[I]BSPWM_SOCKET\f[]
The path of the socket used for the communication between \f[B]bspc\f[] and \f[B]bspwm\f[].
.RS
.RE
.SH PANELS
.IP \[bu] 2
Any EWMH compliant panel (e.g.: \f[I]tint2\f[], \f[I]bmpanel2\f[], etc.).
.IP \[bu] 2
A custom panel if the \f[I]\-s\f[] flag is used (have a look at the files in \f[I]examples/panel\f[]).
.SH KEY FEATURES
.IP \[bu] 2
Configured and controlled through messages.
.IP \[bu] 2
Multiple monitors support (via \f[I]RandR\f[]).
.IP \[bu] 2
EWMH support (\f[B]tint2\f[] works).
.IP \[bu] 2
Automatic and manual modes.
.SH REQUIRED LIBRARIES:
.IP \[bu] 2
libxcb
.IP \[bu] 2
xcb\-util
.IP \[bu] 2
xcb\-util\-wm
.SH MAILING LIST
.PP
bspwm \f[I]at\f[] librelist \f[I]dot\f[] com.
.SH CONTRIBUTORS
.IP \[bu] 2
Ivan Kanakarakis
.IP \[bu] 2
Thomas Adam
.SH AUTHOR
.MT baskerville@lavabit.com
Bastien Dejean
.ME
.SH LINKS
.UR https://github.com/baskerville/bspwm
Homepage
.UE