Doc: Add layout documentation

This commit is contained in:
Leon Henrik Plickat 2020-06-13 14:43:12 +02:00 committed by Isaac Freund
parent 4cbef71a8d
commit ec0631dcef
3 changed files with 82 additions and 2 deletions

View file

@ -210,6 +210,7 @@ const ScdocStep = struct {
const scd_paths = [_][]const u8{
"doc/river.1.scd",
"doc/riverctl.1.scd",
"doc/river-layouts.1.scd",
};
builder: *std.build.Builder,

74
doc/river-layouts.1.scd Normal file
View file

@ -0,0 +1,74 @@
RIVER-LAYOUTS(7) "github.com/ifreund/river"
# NAME
river-layouts - Details on layout generators for river
# DESCRIPTION
River can use external window management layouts. To get such a layout, river
will run an executable and parse its output. This document outlines how such
a layout generator interacts with river.
# INPUT
When running the executable, river will provide it with five parameters which
are appended to the end of the command in the following order:
. The amount of visible clients (integer)
. The amount of views dedicated as master (integer)
. The screen size multiplier for the master area (float between 0.0 and 1.0)
. The useable width of the output (integer)
. The useable height of the output (integer)
A layout generator may choose to ignore any of these values except
for the first one.
# OUTPUT
River expects four integer values for each window: The x position, the y
position, the width and the height. These must be separated by spaces. A
window configuration having fewer or more than four values is an error and will
cause river to fall back the full layout.
A layout generator needs to output position and size for every visible window.
The window configurations are separated by a newline. Too few or too many
outputted window configurations is an error and will cause river to fall back
to the full layout.
River will apply the position and dimensions in the order they are outputted to
the visible windows in the stack from top to bottom.
The output of a layout generator is not required to remain the same when called
with identical parameters. Layouts are allowed to also depend on external
factors or be completely random.
# WINDOW DIMENSIONS and POSITION
Layout generators are not supposed to include padding or leave space for window
borders. The window dimensions will be shrunk by river to make space for these.
River enforces a minimal window width and height of 50.
Layout generators operate on a special coordinate grid from 0 to the maximum
useable width or height of an output with the coordinate 0-0 being positioned at
the top-left corner of the useable area of an output. While layout generators
are free to place windows everywhere (including coordinates below zero or above
the maximum width or height of an output), beware that the relative positioning
of this grid on the screen can not be expected to remain constant. River applies
an offset to window positions, depending on outer padding and the presence of
desktop widgets like bars. Layout generators can therefore not position windows
at exact screen coordinates.
Layout generators are not required to make use of the entire available space.
Windows may overlap.
# EXAMPLE
Below is an example output of a layout generator for four visible windows. In
this example layout all four windows have a size of 500 by 500 and are arranged
in a grid.
```
0 0 500 500
500 0 500 500
0 500 500 500
500 500 500 500
```
# SEE ALSO
*river*(1), *riverctl*(1)

View file

@ -31,8 +31,13 @@ used to control and configure river.
*focus-view* *next*|*previous*
Focus next or previous view in the stack.
*layout* *top-master*|*right-master*|*bottom-master*|*left-master*|*full*
Change the view layout.
*layout* *full*|_command_
Provide a command which river will use for generating the layout of
non-floating windows on the currently focused output. See
*river-layouts*(1) for details on the expected formatting of the output
of layout commands. Alternatively, "full"can be given instead of a
command to cause river to use its single internal layout, in which
windows span the entire width and height of the output.
*mod-master-count* _integer_
Increase or decrease the number of master views. _integer_ can be