+NAME = bspwm
VERSION = 0.7
CC = gcc
rm -f "$(DESTDIR)$(MANPREFIX)"/man1/bsp{wm,c}.1
rm -f "$(DESTDIR)$(CPLPREFIX)"/bspc
+doc:
+ pandoc --no-wrap -t json doc/README.md | runhaskell doc/man_filter.hs | pandoc --no-wrap -f json -t man --template doc/man.template -V name=$(NAME) -o $(NAME).1
+ pandoc --no-wrap -f markdown -t asciidoc doc/README.md -o README.asciidoc
+ patch -p 1 -i doc/quirks.patch
+
clean:
rm -f $(WM_OBJ) $(CL_OBJ) bsp{wm,c}
-.PHONY: all debug clean install uninstall
+.PHONY: all debug install uninstall doc clean
--- /dev/null
+image:https://github.com/baskerville/bspwm/raw/master/logo/bspwm-logo.png[logo]
+
+[[synopsis]]
+Synopsis
+--------
+
+*bspwm* [*-h*|*-v*|*-s* _PANEL_FIFO_|*-p* _PANEL_PREFIX_]
+
+*bspc* _MESSAGE_ [_ARGUMENTS_] [_OPTIONS_]
+
+[[description]]
+Description
+-----------
+
+*bspwm* is a tiling window manager that represents windows as the leaves of a full binary tree.
+
+It is controlled and configured via *bspc*.
+
+[[configuration]]
+Configuration
+-------------
+
+*bspwm* have only two sources of informations: the X events it receives and the messages it reads on a dedicated socket.
+
+Its configuration file is _$XDG_CONFIG_HOME/bspwm/autostart_.
+
+Keyboard and pointer bindings are defined with https://github.com/baskerville/sxhkd[sxhkd].
+
+Example configuration files can be found in the *examples* directory.
+
+[[splitting-modes]]
+Splitting Modes
+---------------
+
+There is only two splitting modes: _automatic_ and _manual_.
+
+The default mode is _automatic_. The _manual_ mode is entered by sending a *presel* message.
+
+Example: insertion of a new node (number 4) into the given tree in _automatic_ mode:
+
+----------------------------------------------------------------
+ b c
+ / \ / \
+ 3 a --> 4 b
+ ^ / \ ^ / \
+ 2 1 3 a
+ / \
+ 2 1
+ +-------------------------+ +-------------------------+
+ | | | | | |
+ | | 2 | | | 3 |
+ | | | | | |
+ | 3 |------------| --> | 4 |------------|
+ | ^ | | | ^ | | |
+ | | 1 | | | 1 | 2 |
+ | | | | | | |
+ +-------------------------+ +-------------------------+
+----------------------------------------------------------------
+
+Same departure, but the mode is _manual_, and a *presel* _up_ message was sent beforehand:
+
+---------------------------------------------------------------
+ b b
+ / \ / \
+ 3 a --> c a
+ ^ / \ / \ / \
+ 2 1 4 3 2 1
+ ^
++-------------------------+ +-------------------------+
+| | | | | |
+| | 2 | | 4 | 2 |
+| | | | ^ | |
+| 3 |------------| --> |------------|------------|
+| ^ | | | | |
+| | 1 | | 3 | 1 |
+| | | | | |
++-------------------------+ +-------------------------+
+---------------------------------------------------------------
+
+[[containers]]
+Containers
+----------
+
+Each monitor contains at least one desktop.
+
+Each desktop contains at most one tree.
+
+[[messages]]
+Messages
+--------
+
+*get* _SETTING_::
+ Return the value of the given setting.
+*set* _SETTING_ _VALUE_::
+ Set the value of the given setting.
+*list* [_DESKTOP_NAME_]::
+ Output the internal representation of the window tree.
+*list_desktops* [*--quiet*]::
+ Perform a dump of each desktop for the current monitor.
+*list_monitors* [*--quiet*]::
+ Perform a dump of each monitor.
+*list_history*::
+ Return the node focus history of each desktop.
+*list_windows*::
+ Return the list of managed windows (i.e. their identifiers).
+*list_rules*::
+ Return the list of rules.
+*presel* _left_|_right_|_up_|_down_ [_SPLIT_RATIO_]::
+ Switch to manual mode and select the splitting direction.
+*cancel*::
+ Switch to automatic mode.
+*ratio* _VALUE_::
+ Set the splitting ratio of the focused window.
+*pad* _MONITOR_NAME_ [_TOP_PADDING_ [_RIGHT_PADDING_ [_BOTTOM_PADDING_ [_LEFT_PADDING_]]]]::
+ Set the padding of the given monitor.
+*focus* _left_|_right_|_up_|_down_::
+ Focus the neighbor window situated in the given direction.
+*shift* _left_|_right_|_up_|_down_::
+ Exchange the current window with the given neighbor.
+*swap* [*--keep-focus*]::
+ Swap the focused window with the last focused window.
+*push* _left_|_right_|_up_|_down_::
+ Push the fence located in the given direction.
+*pull* _left_|_right_|_up_|_down_::
+ Pull the fence located in the given direction.
+*fence_ratio* _left_|_right_|_up_|_down_::
+ Set the splitting ratio of the fence located in the given direction.
+*cycle* _next_|_prev_ [*--skip-floating*|*--skip-tiled*|*--skip-class-equal*|*--skip-class-differ*]::
+ Focus the next or previous window matching the given constraints.
+*nearest* _older_|_newer_ [*--skip-floating*|*--skip-tiled*|*--skip-class-equal*|*--skip-class-differ*]::
+ Focus the nearest window matching the given constraints.
+*biggest*::
+ Return the ID of the biggest tiled window.
+*circulate* _forward_|_backward_::
+ Circulate the leaves in the given direction.
+*grab_pointer* _focus_|_move_|_resize_side_|_resize_corner_::
+ Begin the specified pointer action.
+*track_pointer* _ROOT_X_ _ROOT_Y_::
+ Pass the pointer root coordinates for the current pointer action.
+*ungrab_pointer*::
+ End the current pointer action.
+*toggle_fullscreen*::
+ Toggle the fullscreen state of the current window.
+*toggle_floating*::
+ Toggle the floating state of the current window.
+*toggle_locked*::
+ Toggle the locked state of the current window (locked windows will not respond to the *close* message).
+*toggle_visibility*::
+ Toggle the visibility of all the managed windows.
+*close*::
+ Close the focused window.
+*kill*::
+ Kill the focused window.
+*send_to* _DESKTOP_NAME_ [*--follow*]::
+ Send the focused window to the given desktop.
+*drop_to* _next_|_prev_ [*--follow*]::
+ Send the focused window to the next or previous desktop.
+*send_to_monitor* _MONITOR_NAME_ [*--follow*]::
+ Send the focused window to the given monitor.
+*drop_to_monitor* _next_|_prev_ [*--follow*]::
+ Send the focused window to the next or previous monitor.
+*use* _DESKTOP_NAME_::
+ Select the given desktop.
+*use_monitor* _MONITOR_NAME_::
+ Select the given monitor.
+*alternate*::
+ Alternate between the current and the last focused window.
+*alternate_desktop*::
+ Alternate between the current and the last focused desktop.
+*alternate_monitor*::
+ Alternate between the current and the last focused monitor.
+*add* _DESKTOP_NAME_ ...::
+ Make new desktops with the given names.
+*add_in* _MONITOR_NAME_ _DESKTOP_NAME_ ...::
+ Make new desktops with the given names in the given monitor.
+*rename_monitor* _CURRENT_NAME_ _NEW_NAME_::
+ Rename the monitor named _CURRENT_NAME_ to _NEW_NAME_.
+*rename* _CURRENT_NAME_ _NEW_NAME_::
+ Rename the desktop named _CURRENT_NAME_ to _NEW_NAME_.
+*remove_desktop* _DESKTOP_NAME_ ...::
+ Remove the given desktops.
+*send_desktop_to* _MONITOR_NAME_ [*--follow*]::
+ Send the current desktop to the given monitor.
+*cycle_monitor* _next_|_prev_::
+ Select the next or previous monitor.
+*cycle_desktop* _next_|_prev_ [*--skip-free*|*--skip-occupied*]::
+ Select the next or previous desktop.
+*layout* _monocle_|_tiled_ [_DESKTOP_NAME_ ...]::
+ Set the layout of the given desktops (current if none given).
+*cycle_layout*::
+ Cycle the layout of the current desktop.
+*rotate* _clockwise_|_counter_clockwise_|_full_cycle_::
+ Rotate the window tree.
+*flip* _horizontal_|_vertical_::
+ Flip the window tree.
+*balance*::
+ Adjust the split ratios so that all windows occupy the same area.
+*rule* _PATTERN_ [_DESKTOP_NAME_] [_floating_] [_follow_]::
+ Create a new rule (_PATTERN_ must match the class or instance name).
+*remove_rule* _UID_ ...::
+ Remove the rules with the given _UID_s.
+*put_status*::
+ Output the current state to the panel fifo.
+*adopt_orphans*::
+ Manage all the unmanaged windows remaining from a previous session.
+*restore_layout* _FILE_PATH_::
+ Restore the layout of each desktop from the content of _FILE_PATH_.
+*restore_history* _FILE_PATH_::
+ Restore the history of each desktop from the content of _FILE_PATH_.
+*quit* [_EXIT_STATUS_]::
+ Quit.
+
+[[settings]]
+Settings
+--------
+
+Colors are either http://en.wikipedia.org/wiki/X11_color_names[X color names] or _#RRGGBB_, booleans are _true_ or _false_.
+
+All the boolean settings are _false_ by default.
+
+_focused_border_color_::
+ Color of the border of a focused window of a focused monitor.
+_active_border_color_::
+ Color of the border of a focused window of an unfocused monitor.
+_normal_border_color_::
+ Color of the border of an unfocused window.
+_presel_border_color_::
+ Color of the *presel* message feedback.
+_focused_locked_border_color_::
+ Color of the border of a focused locked window of a focused monitor.
+_active_locked_border_color_::
+ Color of the border of a focused locked window of an unfocused monitor.
+_normal_locked_border_color_::
+ Color of the border of an unfocused locked window.
+_urgent_border_color_::
+ Color of the border of an urgent window.
+_border_width_::
+ Window border width.
+_window_gap_::
+ Value of the gap that separates windows.
+_split_ratio_::
+ Default split ratio.
+_top_padding_, _right_padding_, _bottom_padding_, _left_padding_::
+ Padding space added at the sides of the current monitor.
+_wm_name_::
+ The value that shall be used for the __NET_WM_NAME_ property of the root window.
+_borderless_monocle_::
+ Remove borders for tiled windows in monocle mode.
+_gapless_monocle_::
+ Remove gaps for tiled windows in monocle mode.
+_focus_follows_pointer_::
+ Focus the window under the pointer.
+_pointer_follows_monitor_::
+ When focusing a monitor, put the pointer at its center.
+_adaptative_raise_::
+ Prevent floating windows from being raised when they might cover other floating windows.
+_apply_shadow_property_::
+ Enable shadows for floating windows via the __COMPTON_SHADOW_ property.
+_auto_alternate_::
+ Interpret two consecutive identical *use* messages as an *alternate* message.
+_focus_by_distance_::
+ Use window or leaf distance for focus movement.
+_history_aware_focus_::
+ Give priority to the focus history when focusing nodes.
+
+[[environment-variables]]
+Environment Variables
+---------------------
+
+_BSPWM_SOCKET_::
+ The path of the socket used for the communication between *bspc* and *bspwm*.
+
+[[panels]]
+Panels
+------
+
+* Any EWMH compliant panel (e.g.: _tint2_, _bmpanel2_, etc.).
+* A custom panel if the _-s_ flag is used (have a look at the files in _examples/panel_).
+
+[[key-features]]
+Key Features
+------------
+
+* Configured and controlled through messages.
+* Multiple monitors support (via _RandR_).
+* EWMH support (*tint2* works).
+* Automatic and manual modes.
+
+[[required-libraries]]
+Required Libraries:
+-------------------
+
+* libxcb
+* xcb-util
+* xcb-util-wm
+
+[[mailing-list]]
+Mailing List
+------------
+
+bspwm _at_ librelist _dot_ com.
+
+[[contributors]]
+Contributors
+------------
+
+* https://github.com/c00kiemon5ter[Ivan Kanakarakis]
+* https://github.com/ThomasAdam[Thomas Adam]
+
+++ /dev/null
-![logo](https://github.com/baskerville/bspwm/raw/master/logo/bspwm-logo.png)
-
-## Synopsis
-
- bspwm [-h|-v|-s PANEL_FIFO|-p PANEL_PREFIX]
-
- bspc MESSAGE [ARGUMENTS] [OPTIONS]
-
-## Description
-
-`bspwm` is a tiling window manager that represents windows as the leaves of a full binary tree.
-
-It is controlled and configured via `bspc`.
-
-## Configuration
-
-`bspwm` have only two sources of informations: the X events it receives and the messages it reads on a dedicated socket.
-
-Its configuration file is `$XDG_CONFIG_HOME/bspwm/autostart`.
-
-Keyboard and pointer bindings are defined with [sxhkd](https://github.com/baskerville/sxhkd).
-
-Example configuration files can be found in the `examples` directory.
-
-## Splitting Modes
-
-There is only two splitting modes: *automatic* and *manual*.
-
-The default mode is *automatic*. The *manual* mode is entered by sending a *presel* message.
-
-Example: insertion of a new node (number 4) into the given tree in
-*automatic* mode:
-
- b c
- / \ / \
- 3 a --> 4 b
- ^ / \ ^ / \
- 2 1 3 a
- / \
- 2 1
- +-------------------------+ +-------------------------+
- | | | | | |
- | | 2 | | | 3 |
- | | | | | |
- | 3 |------------| --> | 4 |------------|
- | ^ | | | ^ | | |
- | | 1 | | | 1 | 2 |
- | | | | | | |
- +-------------------------+ +-------------------------+
-
-Same departure, but the mode is *manual*, and a `presel up` message
-was sent beforehand:
-
- b b
- / \ / \
- 3 a --> c a
- ^ / \ / \ / \
- 2 1 4 3 2 1
- ^
- +-------------------------+ +-------------------------+
- | | | | | |
- | | 2 | | 4 | 2 |
- | | | | ^ | |
- | 3 |------------| --> |------------|------------|
- | ^ | | | | |
- | | 1 | | 3 | 1 |
- | | | | | |
- +-------------------------+ +-------------------------+
-
-## Containers
-
-Each monitor contains at least one desktop.
-
-Each desktop contains at most one tree.
-
-## Messages
-
-The syntax for the client is `bspc MESSAGE [ARGUMENTS ...]`.
-
-The following messages are handled:
-
-- `get SETTING` — Return the value of the given setting.
-
-- `set SETTING VALUE` — Set the value of the given setting.
-
-- `list [DESKTOP_NAME]` — Output the internal representation of the window tree.
-
-- `list_desktops [--quiet]` — Perform a dump of each desktop for the current monitor.
-
-- `list_monitors [--quiet]` — Perform a dump of each monitor.
-
-- `list_history` — Return the node focus history of each desktop.
-
-- `list_windows` — Return the list of managed windows (i.e. their identifiers).
-
-- `list_rules` — Return the list of rules.
-
-- `presel left|right|up|down [SPLIT_RATIO]` — Switch to manual mode and select the splitting direction.
-
-- `cancel` — Switch to automatic mode.
-
-- `ratio VALUE` — Set the splitting ratio of the focused window.
-
-- `pad MONITOR_NAME [TOP_PADDING [RIGHT_PADDING [BOTTOM_PADDING [LEFT_PADDING]]]]` — Set the padding of the given monitor.
-
-- `focus left|right|up|down` — Focus the neighbor window situated in the given direction.
-
-- `shift left|right|up|down` — Exchange the current window with the given neighbor.
-
-- `swap [--keep-focus]` — Swap the focused window with the last focused window.
-
-- `push left|right|up|down` — Push the fence located in the given direction.
-
-- `pull left|right|up|down` — Pull the fence located in the given direction.
-
-- `fence_ratio left|right|up|down VALUE` — Set the splitting ratio of the fence located in the given direction.
-
-- `cycle next|prev [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]` — Focus the next or previous window matching the given constraints.
-
-- `nearest older|newer [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]` — Focus the nearest window matching the given constraints.
-
-- `biggest` — Return the ID of the biggest tiled window.
-
-- `circulate forward|backward` — Circulate the leaves in the given direction.
-
-- `grab_pointer focus|move|resize_side|resize_corner` — Begin the specified pointer action.
-
-- `track_pointer ROOT_X ROOT_Y` — Pass the pointer root coordinates for the current pointer action.
-
-- `ungrab_pointer` — End the current pointer action.
-
-- `toggle_fullscreen` — Toggle the fullscreen state of the current window.
-
-- `toggle_floating` — Toggle the floating state of the current window.
-
-- `toggle_locked` — Toggle the locked state of the current window (locked windows will not respond to the `close` message).
-
-- `toggle_visibility` — Toggle the visibility of all the managed windows.
-
-- `close` — Close the focused window.
-
-- `kill` — Kill the focused window.
-
-- `send_to DESKTOP_NAME [--follow]` — Send the focused window to the given desktop.
-
-- `drop_to next|prev [--follow]` — Send the focused window to the next or previous desktop.
-
-- `send_to_monitor MONITOR_NAME [--follow]` — Send the focused window to the given monitor.
-
-- `drop_to_monitor next|prev [--follow]` — Send the focused window to the next or previous monitor.
-
-- `use DESKTOP_NAME` — Select the given desktop.
-
-- `use_monitor MONITOR_NAME` — Select the given monitor.
-
-- `alternate` — Alternate between the current and the last focused window.
-
-- `alternate_desktop` — Alternate between the current and the last focused desktop.
-
-- `alternate_monitor` — Alternate between the current and the last focused monitor.
-
-- `add DESKTOP_NAME ...` — Make new desktops with the given names.
-
-- `add_in MONITOR_NAME DESKTOP_NAME ...` — Make new desktops with the given names in the given monitor.
-
-- `rename_monitor CURRENT_NAME NEW_NAME` — Rename the monitor named `CURRENT_NAME` to `NEW_NAME`.
-
-- `rename CURRENT_NAME NEW_NAME` — Rename the desktop named `CURRENT_NAME` to `NEW_NAME`.
-
-- `remove_desktop DESKTOP_NAME ...` — Remove the given desktops.
-
-- `send_desktop_to MONITOR_NAME [--follow]` — Send the current desktop to the given monitor.
-
-- `cycle_monitor next|prev` — Select the next or previous monitor.
-
-- `cycle_desktop next|prev [--skip-free|--skip-occupied]` — Select the next or previous desktop.
-
-- `layout monocle|tiled [DESKTOP_NAME ...]` — Set the layout of the given desktops (current if none given).
-
-- `cycle_layout` — Cycle the layout of the current desktop.
-
-- `rotate clockwise|counter_clockwise|full_cycle` — Rotate the window tree.
-
-- `flip horizontal|vertical` — Flip the window tree.
-
-- `balance` — Adjust the split ratios so that all windows occupy the same area.
-
-- `rule PATTERN [DESKTOP_NAME] [floating] [follow]` — Create a new rule (`PATTERN` must match the class or instance name).
-
-- `remove_rule UID ...` — Remove the rules with the given UIDs.
-
-- `put_status` — Output the current state to the panel fifo.
-
-- `adopt_orphans` — Manage all the unmanaged windows remaining from a previous session.
-
-- `restore_layout FILE_PATH` — Restore the layout of each desktop from the content of `FILE_PATH`.
-
-- `restore_history FILE_PATH` — Restore the history of each desktop from the content of `FILE_PATH`.
-
-- `quit [EXIT_STATUS]` — Quit.
-
-## Settings
-
-Colors are either [X color names](http://en.wikipedia.org/wiki/X11_color_names) or *#RRGGBB*, booleans are *true* or *false*.
-
-All the boolean settings are *false* by default.
-
-- `focused_border_color` — Color of the border of a focused window of a focused monitor.
-
-- `active_border_color` — Color of the border of a focused window of an unfocused monitor.
-
-- `normal_border_color` — Color of the border of an unfocused window.
-
-- `presel_border_color` — Color of the `presel` message feedback.
-
-- `focused_locked_border_color` — Color of the border of a focused locked window of a focused monitor.
-
-- `active_locked_border_color` — Color of the border of a focused locked window of an unfocused monitor.
-
-- `normal_locked_border_color` — Color of the border of an unfocused locked window.
-
-- `urgent_border_color` — Color of the border of an urgent window.
-
-- `border_width` — Window border width.
-
-- `window_gap` — Value of the gap that separates windows.
-
-- `split_ratio` — Default split ratio.
-
-- `{top,right,bottom,left}_padding` — Padding space added at the sides of the current monitor.
-
-- `wm_name` — The value that shall be used for the `_NET_WM_NAME` property of the root window.
-
-- `borderless_monocle` — Remove borders for tiled windows in monocle mode.
-
-- `gapless_monocle` — Remove gaps for tiled windows in monocle mode.
-
-- `focus_follows_pointer` — Focus the window under the pointer.
-
-- `pointer_follows_monitor` — When focusing a monitor, put the pointer at its center.
-
-- `adaptative_raise` — Prevent floating windows from being raised when they might cover other floating windows.
-
-- `apply_shadow_property` — Enable shadows for floating windows via the `_COMPTON_SHADOW` property.
-
-- `auto_alternate` — Interpret two consecutive identical `use` messages as an `alternate` message.
-
-- `focus_by_distance` — Use window or leaf distance for focus movement.
-
-- `history_aware_focus` — Give priority to the focus history when focusing nodes.
-
-## Environment Variables
-
-- `BSPWM_SOCKET` — The path of the socket used for the communication between `bspc` and `bspwm`.
-
-## Key Features
-
-- Configured and controlled through messages.
-- Multiple monitors support (via *RandR*).
-- EWMH support (`tint2` works).
-- Automatic and manual modes.
-
-## Panels
-
-- Any EWMH compliant panel (e.g.: `tint2`, `bmpanel2`, etc.).
-- A custom panel if the `-s` flag is used (have a look at the files in `examples/panel`).
-
-## Required Libraries:
-
-- libxcb
-- xcb-util
-- xcb-util-wm
-
-## Installation
-
- make
- make install
-
-## Contributors
-
-- [Ivan Kanakarakis](https://github.com/c00kiemon5ter)
-
-- [Thomas Adam](https://github.com/ThomasAdam)
-
-## Mailing List
-
-bspwm *at* librelist *dot* com.
-
-## License
-
-BSD.
-.TH BSPWM 1 bspwm
+.TH "bspwm" 1 "June 23, 2013" "Bspwm"
.SH NAME
-bspwm \- Tiling window manager based on binary space partitioning
+bspwm - Tiling window manager based on binary space partitioning
+.PP
.SH SYNOPSIS
-.B bspwm
-.RI [ -h | -v | "-s PANEL_FIFO" | "-p PANEL_PREFIX" ]
-.P
-.BI bspc " MESSAGE"
-.RI [ ARGUMENTS ]
-.RI [ OPTIONS ]
+.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
-.B bspwm
-is a tiling window manager that represents windows as the leaves of a full binary tree.
-.P
-It is controlled and configured via
-.BR bspc .
+.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
-.B bspwm
-have only two sources of informations: the
-.B X
-events it receives and the messages it reads on a dedicated socket.
-.P
-Its configuration file is
-.IR $XDG_CONFIG_HOME/bspwm/autostart .
-.P
-Keyboard and pointer bindings are defined with
-.BR sxhkd .
-.P
-Example configuration files can be found in the
-.I examples
-directory.
+.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
-There is only two splitting modes:
-.IR automatic " and " manual .
-.P
-The default mode is
-.IR automatic .
-The
-.I manual
-mode is entered by sending a
-.B presel
-message.
-.P
-Example: insertion of a new node (number 4) into the given tree in
-.I automatic
-mode:
-.EX
-
- b c
- / \\ / \\
- 3 a --> 4 b
- ^ / \\ ^ / \\
- 2 1 3 a
- / \\
- 2 1
- +-------------------------+ +-------------------------+
- | | | | | |
- | | 2 | | | 3 |
- | | | | | |
- | 3 |------------| --> | 4 |------------|
- | ^ | | | ^ | | |
- | | 1 | | | 1 | 2 |
- | | | | | | |
- +-------------------------+ +-------------------------+
-
-.EE
-.P
-Same departure, but the mode is
-.IR manual ,
-and a
-.BI presel " up"
-message was sent beforehand:
-.EX
-
- b b
- / \\ / \\
- 3 a --> c a
- ^ / \\ / \\ / \\
- 2 1 4 3 2 1
- ^
- +-------------------------+ +-------------------------+
- | | | | | |
- | | 2 | | 4 | 2 |
- | | | | ^ | |
- | 3 |------------| --> |------------|------------|
- | ^ | | | | |
- | | 1 | | 3 | 1 |
- | | | | | |
- +-------------------------+ +-------------------------+
-
-.EE
+.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
-.P
+.PP
Each monitor contains at least one desktop.
-.P
+.PP
Each desktop contains at most one tree.
.SH MESSAGES
.TP
-.BI get " SETTING"
+.B \f[B]get\f[] \f[I]SETTING\f[]
Return the value of the given setting.
+.RS
+.RE
.TP
-.BI set " SETTING VALUE"
+.B \f[B]set\f[] \f[I]SETTING\f[] \f[I]VALUE\f[]
Set the value of the given setting.
+.RS
+.RE
.TP
-.BI list " [DESKTOP_NAME]"
+.B \f[B]list\f[] [\f[I]DESKTOP_NAME\f[]]
Output the internal representation of the window tree.
+.RS
+.RE
.TP
-.BI list_desktops " [--quiet]"
+.B \f[B]list_desktops\f[] [\f[B]\-\-quiet\f[]]
Perform a dump of each desktop for the current monitor.
+.RS
+.RE
.TP
-.BI list_monitors " [--quiet]"
+.B \f[B]list_monitors\f[] [\f[B]\-\-quiet\f[]]
Perform a dump of each monitor.
+.RS
+.RE
.TP
-.BI list_history
+.B \f[B]list_history\f[]
Return the node focus history of each desktop.
+.RS
+.RE
.TP
-.BI list_windows
-Return the list of managed windows (i.e. their identifiers).
+.B \f[B]list_windows\f[]
+Return the list of managed windows (i.e.
+their identifiers).
+.RS
+.RE
.TP
-.BI list_rules
+.B \f[B]list_rules\f[]
Return the list of rules.
+.RS
+.RE
.TP
-.BI presel " left|right|up|down [SPLIT_RATIO]"
+.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
-.BI cancel
+.B \f[B]cancel\f[]
Switch to automatic mode.
+.RS
+.RE
.TP
-.BI ratio " VALUE"
+.B \f[B]ratio\f[] \f[I]VALUE\f[]
Set the splitting ratio of the focused window.
+.RS
+.RE
.TP
-.BI pad " MONITOR_NAME [TOP_PADDING [RIGHT_PADDING [BOTTOM_PADDING [LEFT_PADDING]]]]"
+.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
-.BI focus " left|right|up|down"
+.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
-.BI shift " left|right|up|down"
+.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
-.BI swap " [--keep-focus]"
+.B \f[B]swap\f[] [\f[B]\-\-keep\-focus\f[]]
Swap the focused window with the last focused window.
+.RS
+.RE
.TP
-.BI push " left|right|up|down"
+.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
-.BI pull " left|right|up|down"
+.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
-.BI fence_ratio " left|right|up|down VALUE"
+.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
-.BI cycle " next|prev [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]"
+.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
-.BI nearest " older|newer [--skip-floating|--skip-tiled|--skip-class-equal|--skip-class-differ]"
+.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
-.BI biggest
+.B \f[B]biggest\f[]
Return the ID of the biggest tiled window.
+.RS
+.RE
.TP
-.BI circulate " forward|backward"
+.B \f[B]circulate\f[] \f[I]forward\f[]|\f[I]backward\f[]
Circulate the leaves in the given direction.
+.RS
+.RE
.TP
-.BI grab_pointer " focus|move|resize_side|resize_corner"
+.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
-.BI track_pointer " ROOT_X ROOT_Y"
+.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
-.BI ungrab_pointer
+.B \f[B]ungrab_pointer\f[]
End the current pointer action.
+.RS
+.RE
.TP
-.BI toggle_fullscreen
+.B \f[B]toggle_fullscreen\f[]
Toggle the fullscreen state of the current window.
+.RS
+.RE
.TP
-.BI toggle_floating
+.B \f[B]toggle_floating\f[]
Toggle the floating state of the current window.
+.RS
+.RE
.TP
-.BI toggle_locked
-Toggle the locked state of the current window (locked windows will not respond to the
-.B close
-message).
+.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
-.BI toggle_visibility
+.B \f[B]toggle_visibility\f[]
Toggle the visibility of all the managed windows.
+.RS
+.RE
.TP
-.BI close
+.B \f[B]close\f[]
Close the focused window.
+.RS
+.RE
.TP
-.BI kill
+.B \f[B]kill\f[]
Kill the focused window.
+.RS
+.RE
.TP
-.BI send_to " DESKTOP_NAME [--follow]"
+.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
-.BI drop_to " next|prev [--follow]"
+.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
-.BI send_to_monitor " MONITOR_NAME [--follow]"
+.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
-.BI drop_to_monitor " next|prev [--follow]"
+.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
-.BI use " DESKTOP_NAME"
+.B \f[B]use\f[] \f[I]DESKTOP_NAME\f[]
Select the given desktop.
+.RS
+.RE
.TP
-.BI use_monitor " MONITOR_NAME"
+.B \f[B]use_monitor\f[] \f[I]MONITOR_NAME\f[]
Select the given monitor.
+.RS
+.RE
.TP
-.BI alternate
+.B \f[B]alternate\f[]
Alternate between the current and the last focused window.
+.RS
+.RE
.TP
-.BI alternate_desktop
+.B \f[B]alternate_desktop\f[]
Alternate between the current and the last focused desktop.
+.RS
+.RE
.TP
-.BI alternate_monitor
+.B \f[B]alternate_monitor\f[]
Alternate between the current and the last focused monitor.
+.RS
+.RE
.TP
-.BI add " DESKTOP_NAME ..."
+.B \f[B]add\f[] \f[I]DESKTOP_NAME\f[] ...
Make new desktops with the given names.
+.RS
+.RE
.TP
-.BI add_in " MONITOR_NAME DESKTOP_NAME ..."
+.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
-.BI rename_monitor " CURRENT_NAME NEW_NAME"
-Rename the monitor named CURRENT_NAME to NEW_NAME.
+.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
-.BI rename " CURRENT_NAME NEW_NAME"
-Rename the desktop named CURRENT_NAME to NEW_NAME.
+.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
-.BI remove_desktop " DESKTOP_NAME ..."
+.B \f[B]remove_desktop\f[] \f[I]DESKTOP_NAME\f[] ...
Remove the given desktops.
+.RS
+.RE
.TP
-.BI send_desktop_to " MONITOR_NAME [--follow]"
+.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
-.BI cycle_monitor " next|prev"
+.B \f[B]cycle_monitor\f[] \f[I]next\f[]|\f[I]prev\f[]
Select the next or previous monitor.
+.RS
+.RE
.TP
-.BI cycle_desktop " next|prev [--skip-free|--skip-occupied]"
+.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
-.BI layout " monocle|tiled [DESKTOP_NAME ...]"
+.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
-.BI cycle_layout
+.B \f[B]cycle_layout\f[]
Cycle the layout of the current desktop.
+.RS
+.RE
.TP
-.BI rotate " clockwise|counter_clockwise|full_cycle"
+.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
-.BI flip " horizontal|vertical"
+.B \f[B]flip\f[] \f[I]horizontal\f[]|\f[I]vertical\f[]
Flip the window tree.
+.RS
+.RE
.TP
-.B balance
+.B \f[B]balance\f[]
Adjust the split ratios so that all windows occupy the same area.
+.RS
+.RE
.TP
-.BI rule " PATTERN [DESKTOP_NAME] [floating] [follow]"
-Create a new rule (PATTERN must match the class or instance name).
+.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
-.BI remove_rule " UID ..."
-Remove the rules with the given UIDs.
+.B \f[B]remove_rule\f[] \f[I]UID\f[] ...
+Remove the rules with the given \f[I]UID\f[]s.
+.RS
+.RE
.TP
-.BI put_status
+.B \f[B]put_status\f[]
Output the current state to the panel fifo.
+.RS
+.RE
.TP
-.BI adopt_orphans
+.B \f[B]adopt_orphans\f[]
Manage all the unmanaged windows remaining from a previous session.
+.RS
+.RE
.TP
-.BI restore_layout " FILE_PATH"
-Restore the layout of each desktop from the content of FILE_PATH.
+.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
-.BI restore_history " FILE_PATH"
-Restore the history of each desktop from the content of FILE_PATH.
+.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
-.BI quit " [EXIT_STATUS]"
+.B \f[B]quit\f[] [\f[I]EXIT_STATUS\f[]]
Quit.
+.RS
+.RE
.SH SETTINGS
-.P
-Colors are either
-.B X
-color names (cf.
-.I COLOR NAMES
-in
-.BR X (7))
-or
-.I #RRGGBB
-, booleans are
-.IR "true " "or " false .
-.P
-All the boolean settings are
-.I false
-by default.
-.TP
-.I focused_border_color
+.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
-.I active_border_color
+.B \f[I]active_border_color\f[]
Color of the border of a focused window of an unfocused monitor.
+.RS
+.RE
.TP
-.I normal_border_color
+.B \f[I]normal_border_color\f[]
Color of the border of an unfocused window.
+.RS
+.RE
.TP
-.I presel_border_color
-Color of the
-.B presel
-message feedback.
+.B \f[I]presel_border_color\f[]
+Color of the \f[B]presel\f[] message feedback.
+.RS
+.RE
.TP
-.I focused_locked_border_color
+.B \f[I]focused_locked_border_color\f[]
Color of the border of a focused locked window of a focused monitor.
+.RS
+.RE
.TP
-.I active_locked_border_color
+.B \f[I]active_locked_border_color\f[]
Color of the border of a focused locked window of an unfocused monitor.
+.RS
+.RE
.TP
-.I normal_locked_border_color
+.B \f[I]normal_locked_border_color\f[]
Color of the border of an unfocused locked window.
+.RS
+.RE
.TP
-.I urgent_border_color
+.B \f[I]urgent_border_color\f[]
Color of the border of an urgent window.
+.RS
+.RE
.TP
-.I border_width
+.B \f[I]border_width\f[]
Window border width.
+.RS
+.RE
.TP
-.I window_gap
+.B \f[I]window_gap\f[]
Value of the gap that separates windows.
+.RS
+.RE
.TP
-.I split_ratio
+.B \f[I]split_ratio\f[]
Default split ratio.
+.RS
+.RE
.TP
-.I top_padding
-.TQ
-.I right_padding
-.TQ
-.I bottom_padding
-.TQ
-.I left_padding
+.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
-.I wm_name
-The value that shall be used for the
-.B _NET_WM_NAME
-property of the root window.
+.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
-.I borderless_monocle
+.B \f[I]borderless_monocle\f[]
Remove borders for tiled windows in monocle mode.
+.RS
+.RE
.TP
-.I gapless_monocle
+.B \f[I]gapless_monocle\f[]
Remove gaps for tiled windows in monocle mode.
+.RS
+.RE
.TP
-.I focus_follows_pointer
+.B \f[I]focus_follows_pointer\f[]
Focus the window under the pointer.
+.RS
+.RE
.TP
-.I pointer_follows_monitor
+.B \f[I]pointer_follows_monitor\f[]
When focusing a monitor, put the pointer at its center.
+.RS
+.RE
.TP
-.I adaptative_raise
+.B \f[I]adaptative_raise\f[]
Prevent floating windows from being raised when they might cover other floating windows.
+.RS
+.RE
.TP
-.I apply_shadow_property
-Enable shadows for floating windows via the
-.B _COMPTON_SHADOW
-property.
+.B \f[I]apply_shadow_property\f[]
+Enable shadows for floating windows via the \f[I]_COMPTON_SHADOW\f[] property.
+.RS
+.RE
.TP
-.I auto_alernate
-Interpret two consecutive identical
-.B use
-messages as an
-.B alternate
-message.
+.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
-.I focus_by_distance
+.B \f[I]focus_by_distance\f[]
Use window or leaf distance for focus movement.
+.RS
+.RE
.TP
-.I history_aware_focus
+.B \f[I]history_aware_focus\f[]
Give priority to the focus history when focusing nodes.
+.RS
+.RE
.SH ENVIRONMENT VARIABLES
.TP
-.I BSPWM_SOCKET
-The path of the socket used for the communication between
-.BR bspc " and " bspwm .
-.SH AUTHOR
-.EX
-Bastien Dejean <baskerville at lavabit.com>
-.SH CONTRIBUTORS
-.EX
-Ivan Kanakarakis <ivan.kanak at gmail.com>
-Thomas Adam <thomas at xteddy.org>
-.EE
-.SH HOMEPAGE
-.TP
-https://github.com/baskerville/bspwm
+.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
-.TP
-bspwm at librelist.com
-.SH SEE ALSO
-.BR monsterwm (1),
-.BR tmux (1).
+.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
--- /dev/null
+% Bspwm User's Guide
+% Bastien Dejean
+% June 23, 2013
+
+![logo](https://github.com/baskerville/bspwm/raw/master/logo/bspwm-logo.png)
+
+# Synopsis
+
+**bspwm** [**-h**|**-v**|**-s** *PANEL\_FIFO*|**-p** *PANEL\_PREFIX*]
+
+**bspc** *MESSAGE* [*ARGUMENTS*] [*OPTIONS*]
+
+# Description
+
+**bspwm** is a tiling window manager that represents windows as the leaves of a full binary tree.
+
+It is controlled and configured via **bspc**.
+
+# Configuration
+
+**bspwm** have only two sources of informations: the X events it receives and the messages it reads on a dedicated socket.
+
+Its configuration file is *$XDG_CONFIG_HOME/bspwm/autostart*.
+
+Keyboard and pointer bindings are defined with [sxhkd](https://github.com/baskerville/sxhkd).
+
+Example configuration files can be found in the **examples** directory.
+
+# Splitting Modes
+
+There is only two splitting modes: *automatic* and *manual*.
+
+The default mode is *automatic*. The *manual* mode is entered by sending a **presel** message.
+
+Example: insertion of a new node (number 4) into the given tree in
+*automatic* mode:
+
+ b c
+ / \ / \
+ 3 a --> 4 b
+ ^ / \ ^ / \
+ 2 1 3 a
+ / \
+ 2 1
+ +-------------------------+ +-------------------------+
+ | | | | | |
+ | | 2 | | | 3 |
+ | | | | | |
+ | 3 |------------| --> | 4 |------------|
+ | ^ | | | ^ | | |
+ | | 1 | | | 1 | 2 |
+ | | | | | | |
+ +-------------------------+ +-------------------------+
+
+Same departure, but the mode is *manual*, and a **presel** *up* message
+was sent beforehand:
+
+ b b
+ / \ / \
+ 3 a --> c a
+ ^ / \ / \ / \
+ 2 1 4 3 2 1
+ ^
+ +-------------------------+ +-------------------------+
+ | | | | | |
+ | | 2 | | 4 | 2 |
+ | | | | ^ | |
+ | 3 |------------| --> |------------|------------|
+ | ^ | | | | |
+ | | 1 | | 3 | 1 |
+ | | | | | |
+ +-------------------------+ +-------------------------+
+
+# Containers
+
+Each monitor contains at least one desktop.
+
+Each desktop contains at most one tree.
+
+# Messages
+
+**get** *SETTING*
+: Return the value of the given setting.
+
+**set** *SETTING* *VALUE*
+: Set the value of the given setting.
+
+**list** [*DESKTOP\_NAME*]
+: Output the internal representation of the window tree.
+
+**list\_desktops** [**--quiet**]
+: Perform a dump of each desktop for the current monitor.
+
+**list\_monitors** [**--quiet**]
+: Perform a dump of each monitor.
+
+**list\_history**
+: Return the node focus history of each desktop.
+
+**list\_windows**
+: Return the list of managed windows (i.e. their identifiers).
+
+**list\_rules**
+: Return the list of rules.
+
+**presel** *left*|*right*|*up*|*down* [*SPLIT\_RATIO*]
+: Switch to manual mode and select the splitting direction.
+
+**cancel**
+: Switch to automatic mode.
+
+**ratio** *VALUE*
+: Set the splitting ratio of the focused window.
+
+**pad** *MONITOR\_NAME* [*TOP\_PADDING* [*RIGHT\_PADDING* [*BOTTOM\_PADDING* [*LEFT\_PADDING*]]]]
+: Set the padding of the given monitor.
+
+**focus** *left*|*right*|*up*|*down*
+: Focus the neighbor window situated in the given direction.
+
+**shift** *left*|*right*|*up*|*down*
+: Exchange the current window with the given neighbor.
+
+**swap** [**--keep-focus**]
+: Swap the focused window with the last focused window.
+
+**push** *left*|*right*|*up*|*down*
+: Push the fence located in the given direction.
+
+**pull** *left*|*right*|*up*|*down*
+: Pull the fence located in the given direction.
+
+**fence\_ratio** *left*|*right*|*up*|*down*
+: Set the splitting ratio of the fence located in the given direction.
+
+**cycle** *next*|*prev* [**--skip-floating**|**--skip-tiled**|**--skip-class-equal**|**--skip-class-differ**]
+: Focus the next or previous window matching the given constraints.
+
+**nearest** *older*|*newer* [**--skip-floating**|**--skip-tiled**|**--skip-class-equal**|**--skip-class-differ**]
+: Focus the nearest window matching the given constraints.
+
+**biggest**
+: Return the ID of the biggest tiled window.
+
+**circulate** *forward*|*backward*
+: Circulate the leaves in the given direction.
+
+**grab\_pointer** *focus*|*move*|*resize\_side*|*resize\_corner*
+: Begin the specified pointer action.
+
+**track\_pointer** *ROOT\_X* *ROOT\_Y*
+: Pass the pointer root coordinates for the current pointer action.
+
+**ungrab\_pointer**
+: End the current pointer action.
+
+**toggle\_fullscreen**
+: Toggle the fullscreen state of the current window.
+
+**toggle\_floating**
+: Toggle the floating state of the current window.
+
+**toggle\_locked**
+: Toggle the locked state of the current window (locked windows will not respond to the **close** message).
+
+**toggle\_visibility**
+: Toggle the visibility of all the managed windows.
+
+**close**
+: Close the focused window.
+
+**kill**
+: Kill the focused window.
+
+**send\_to** *DESKTOP\_NAME* [**--follow**]
+: Send the focused window to the given desktop.
+
+**drop\_to** *next*|*prev* [**--follow**]
+: Send the focused window to the next or previous desktop.
+
+**send\_to\_monitor** *MONITOR\_NAME* [**--follow**]
+: Send the focused window to the given monitor.
+
+**drop\_to\_monitor** *next*|*prev* [**--follow**]
+: Send the focused window to the next or previous monitor.
+
+**use** *DESKTOP\_NAME*
+: Select the given desktop.
+
+**use\_monitor** *MONITOR\_NAME*
+: Select the given monitor.
+
+**alternate**
+: Alternate between the current and the last focused window.
+
+**alternate\_desktop**
+: Alternate between the current and the last focused desktop.
+
+**alternate\_monitor**
+: Alternate between the current and the last focused monitor.
+
+**add** *DESKTOP\_NAME* ...
+: Make new desktops with the given names.
+
+**add\_in** *MONITOR\_NAME* *DESKTOP\_NAME* ...
+: Make new desktops with the given names in the given monitor.
+
+**rename\_monitor** *CURRENT\_NAME* *NEW\_NAME*
+: Rename the monitor named *CURRENT\_NAME* to *NEW\_NAME*.
+
+**rename** *CURRENT\_NAME* *NEW\_NAME*
+: Rename the desktop named *CURRENT\_NAME* to *NEW\_NAME*.
+
+**remove\_desktop** *DESKTOP\_NAME* ...
+: Remove the given desktops.
+
+**send\_desktop\_to** *MONITOR\_NAME* [**--follow**]
+: Send the current desktop to the given monitor.
+
+**cycle\_monitor** *next*|*prev*
+: Select the next or previous monitor.
+
+**cycle\_desktop** *next*|*prev* [**--skip-free**|**--skip-occupied**]
+: Select the next or previous desktop.
+
+**layout** *monocle*|*tiled* [*DESKTOP\_NAME* ...]
+: Set the layout of the given desktops (current if none given).
+
+**cycle\_layout**
+: Cycle the layout of the current desktop.
+
+**rotate** *clockwise*|*counter\_clockwise*|*full\_cycle*
+: Rotate the window tree.
+
+**flip** *horizontal*|*vertical*
+: Flip the window tree.
+
+**balance**
+: Adjust the split ratios so that all windows occupy the same area.
+
+**rule** *PATTERN* [*DESKTOP\_NAME*] [*floating*] [*follow*]
+: Create a new rule (*PATTERN* must match the class or instance name).
+
+**remove\_rule** *UID* ...
+: Remove the rules with the given *UID*s.
+
+**put\_status**
+: Output the current state to the panel fifo.
+
+**adopt\_orphans**
+: Manage all the unmanaged windows remaining from a previous session.
+
+**restore\_layout** *FILE\_PATH*
+: Restore the layout of each desktop from the content of *FILE\_PATH*.
+
+**restore\_history** *FILE\_PATH*
+: Restore the history of each desktop from the content of *FILE\_PATH*.
+
+**quit** [*EXIT\_STATUS*]
+: Quit.
+
+# Settings
+
+Colors are either [X color names](http://en.wikipedia.org/wiki/X11\_color\_names) or *#RRGGBB*, booleans are *true* or *false*.
+
+All the boolean settings are *false* by default.
+
+*focused\_border\_color*
+: Color of the border of a focused window of a focused monitor.
+
+*active\_border\_color*
+: Color of the border of a focused window of an unfocused monitor.
+
+*normal\_border\_color*
+: Color of the border of an unfocused window.
+
+*presel\_border\_color*
+: Color of the **presel** message feedback.
+
+*focused\_locked\_border\_color*
+: Color of the border of a focused locked window of a focused monitor.
+
+*active\_locked\_border\_color*
+: Color of the border of a focused locked window of an unfocused monitor.
+
+*normal\_locked\_border\_color*
+: Color of the border of an unfocused locked window.
+
+*urgent\_border\_color*
+: Color of the border of an urgent window.
+
+*border\_width*
+: Window border width.
+
+*window\_gap*
+: Value of the gap that separates windows.
+
+*split\_ratio*
+: Default split ratio.
+
+*top\_padding*, *right\_padding*, *bottom\_padding*, *left\_padding*
+: Padding space added at the sides of the current monitor.
+
+*wm\_name*
+: The value that shall be used for the *\_NET\_WM\_NAME* property of the root window.
+
+*borderless\_monocle*
+: Remove borders for tiled windows in monocle mode.
+
+*gapless\_monocle*
+: Remove gaps for tiled windows in monocle mode.
+
+*focus\_follows\_pointer*
+: Focus the window under the pointer.
+
+*pointer\_follows\_monitor*
+: When focusing a monitor, put the pointer at its center.
+
+*adaptative\_raise*
+: Prevent floating windows from being raised when they might cover other floating windows.
+
+*apply\_shadow\_property*
+: Enable shadows for floating windows via the *\_COMPTON\_SHADOW* property.
+
+*auto\_alternate*
+: Interpret two consecutive identical **use** messages as an **alternate** message.
+
+*focus\_by\_distance*
+: Use window or leaf distance for focus movement.
+
+*history\_aware\_focus*
+: Give priority to the focus history when focusing nodes.
+
+# Environment Variables
+
+*BSPWM_SOCKET*
+: The path of the socket used for the communication between **bspc** and **bspwm**.
+
+# Panels
+
+- Any EWMH compliant panel (e.g.: *tint2*, *bmpanel2*, etc.).
+- A custom panel if the *-s* flag is used (have a look at the files in *examples/panel*).
+
+# Key Features
+
+- Configured and controlled through messages.
+- Multiple monitors support (via *RandR*).
+- EWMH support (**tint2** works).
+- Automatic and manual modes.
+
+# Required Libraries:
+
+- libxcb
+- xcb-util
+- xcb-util-wm
+
+# Mailing List
+
+bspwm *at* librelist *dot* com.
+
+# Contributors
+
+- [Ivan Kanakarakis](https://github.com/c00kiemon5ter)
+
+- [Thomas Adam](https://github.com/ThomasAdam)
--- /dev/null
+.TH "$name$" 1 "$date$" "$title$"
+.SH NAME
+$name$ - Tiling window manager based on binary space partitioning
+$body$
+.SH AUTHOR
+.MT baskerville@lavabit.com
+$author$
+.ME
+.SH LINKS
+.UR https://github.com/baskerville/$name$
+Homepage
+.UE
--- /dev/null
+import Text.Pandoc
+import Data.Char (toUpper)
+
+main :: IO ()
+main = toJsonFilter (capitalizeHeaders . bottomUp delink)
+
+capitalizeHeaders :: Block -> Block
+capitalizeHeaders (Header 1 attr xs) = Header 1 attr $ bottomUp capitalize xs
+capitalizeHeaders x = x
+
+capitalize :: Inline -> Inline
+capitalize (Str xs) = Str $ map toUpper xs
+capitalize x = x
+
+delink :: [Inline] -> [Inline]
+delink ((Link txt _) : xs) = txt ++ delink xs
+delink ((Image _ _) : xs) = []
+delink (x : xs) = x : delink xs
+delink [] = []
--- /dev/null
+diff -ru a/README.asciidoc b/README.asciidoc
+--- a/README.asciidoc 2013-06-24 22:46:06.915021108 +0200
++++ b/README.asciidoc 2013-06-24 22:48:26.871141944 +0200
+@@ -6,7 +6,7 @@
+
+ *bspwm* [*-h*|*-v*|*-s* _PANEL_FIFO_|*-p* _PANEL_PREFIX_]
+
+-*bspc* _MESSAGE_ [_ARGUMENTS_][*OPTIONS*]
++*bspc* _MESSAGE_ [_ARGUMENTS_] [_OPTIONS_]
+
+ [[description]]
+ Description
+@@ -195,7 +195,7 @@
+ Flip the window tree.
+ *balance*::
+ Adjust the split ratios so that all windows occupy the same area.
+-*rule* _PATTERN_ [_DESKTOP_NAME_][*floating*] [_follow_]::
++*rule* _PATTERN_ [_DESKTOP_NAME_] [_floating_] [_follow_]::
+ Create a new rule (_PATTERN_ must match the class or instance name).
+ *remove_rule* _UID_ ...::
+ Remove the rules with the given _UID_s.
+diff -ru a/bspwm.1 b/bspwm.1
+--- a/bspwm.1 2013-06-24 22:46:06.915021108 +0200
++++ b/bspwm.1 2013-06-24 22:47:12.031433820 +0200
+@@ -6,7 +6,7 @@
+ .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[]][*OPTIONS*]
++\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.
+@@ -345,7 +345,7 @@
+ .RS
+ .RE
+ .TP
+-.B \f[B]rule\f[] \f[I]PATTERN\f[] [\f[I]DESKTOP_NAME\f[]][*floating*] [\f[I]follow\f[]]
++.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