]> git.lizzy.rs Git - bspwm.git/commitdiff
Generate documentation via `pandoc`
authorBastien Dejean <nihilhill@gmail.com>
Mon, 24 Jun 2013 20:53:00 +0000 (22:53 +0200)
committerBastien Dejean <nihilhill@gmail.com>
Mon, 24 Jun 2013 20:53:00 +0000 (22:53 +0200)
Makefile
README.asciidoc [new file with mode: 0644]
README.md [deleted file]
bspwm.1
doc/README.md [new file with mode: 0644]
doc/man.template [new file with mode: 0644]
doc/man_filter.hs [new file with mode: 0644]
doc/quirks.patch [new file with mode: 0644]

index 767caa4d74d0df117c70bc2118703c5e9dd6688e..5bd224e2022da83ed74e423067f3ec7f71d707ec 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,4 @@
+NAME = bspwm
 VERSION = 0.7
 
 CC      = gcc
@@ -49,7 +50,12 @@ uninstall:
        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 
diff --git a/README.asciidoc b/README.asciidoc
new file mode 100644 (file)
index 0000000..4b41d86
--- /dev/null
@@ -0,0 +1,309 @@
+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]
+
diff --git a/README.md b/README.md
deleted file mode 100644 (file)
index f24ba1e..0000000
--- a/README.md
+++ /dev/null
@@ -1,291 +0,0 @@
-![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.
diff --git a/bspwm.1 b/bspwm.1
index 973908408dc78d87f578ba1d68ee6f383de761c5..81d476582d6b39628bd94db90df91ad3265a29c7 100644 (file)
--- a/bspwm.1
+++ b/bspwm.1
-.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
diff --git a/doc/README.md b/doc/README.md
new file mode 100644 (file)
index 0000000..3d4f302
--- /dev/null
@@ -0,0 +1,365 @@
+% 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)
diff --git a/doc/man.template b/doc/man.template
new file mode 100644 (file)
index 0000000..e2741d0
--- /dev/null
@@ -0,0 +1,12 @@
+.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
diff --git a/doc/man_filter.hs b/doc/man_filter.hs
new file mode 100644 (file)
index 0000000..235da91
--- /dev/null
@@ -0,0 +1,19 @@
+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 []                  = []
diff --git a/doc/quirks.patch b/doc/quirks.patch
new file mode 100644 (file)
index 0000000..3007904
--- /dev/null
@@ -0,0 +1,42 @@
+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