Doc: Add layout documentation
This commit is contained in:
		
				
					committed by
					
						
						Isaac Freund
					
				
			
			
				
	
			
			
			
						parent
						
							4cbef71a8d
						
					
				
				
					commit
					ec0631dcef
				
			@ -210,6 +210,7 @@ const ScdocStep = struct {
 | 
				
			|||||||
    const scd_paths = [_][]const u8{
 | 
					    const scd_paths = [_][]const u8{
 | 
				
			||||||
        "doc/river.1.scd",
 | 
					        "doc/river.1.scd",
 | 
				
			||||||
        "doc/riverctl.1.scd",
 | 
					        "doc/riverctl.1.scd",
 | 
				
			||||||
 | 
					        "doc/river-layouts.1.scd",
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    builder: *std.build.Builder,
 | 
					    builder: *std.build.Builder,
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										74
									
								
								doc/river-layouts.1.scd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								doc/river-layouts.1.scd
									
									
									
									
									
										Normal 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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -31,8 +31,13 @@ used to control and configure river.
 | 
				
			|||||||
*focus-view* *next*|*previous*
 | 
					*focus-view* *next*|*previous*
 | 
				
			||||||
	Focus next or previous view in the stack.
 | 
						Focus next or previous view in the stack.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*layout* *top-master*|*right-master*|*bottom-master*|*left-master*|*full*
 | 
					*layout* *full*|_command_
 | 
				
			||||||
	Change the view layout.
 | 
						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_
 | 
					*mod-master-count* _integer_
 | 
				
			||||||
	Increase or decrease the number of master views. _integer_ can be
 | 
						Increase or decrease the number of master views. _integer_ can be
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user