mirror of
				https://codeberg.org/dwl/dwl-patches.git
				synced 2025-10-27 10:14:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ### Description
 | ||
| 
 | ||
| # btrtile — A Focus-Driven Tiling Layout
 | ||
| 
 | ||
| It provides a focus-driven, mouse- and keyboard-friendly tiling layout that grants you granular control over how clients are placed and resized.
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| # Why btrtile
 | ||
| 
 | ||
| While dwl’s patches folder is full of different layouts, I couldn't find suitable layout that would work well with my workflow and single ultrawide monitor setup. btrtile aims to solve that by introducing a layout strategy that splits clients according to user focus and pointer position.
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| # Features
 | ||
| 
 | ||
| - **Combined Tiling and Management**  
 | ||
|   Combines tiling layout and management of clients under one patchset.
 | ||
| 
 | ||
| - **Focus-Driven Splits**  
 | ||
|   When you add a new client, btrtile checks where your pointer is relative to the focused client’s geometry.  
 | ||
|   - If the pointer is on the left half (for a horizontally large client), the new client spawns on the left side, and vice versa.  
 | ||
|   - By default, new splits are 50/50.
 | ||
| 
 | ||
| - **Adaptive Splitting**  
 | ||
|   - If the area to be split is wider than its height, btrtile does a vertical split.  
 | ||
|   - Otherwise, it does a horizontal split.
 | ||
| 
 | ||
| - **Keyboard and Mouse Driven**  
 | ||
|   - Supports keyboard-based commands for quick ratio adjustments and client swapping.  
 | ||
|   - Mouse-based resizing and moving are integrated for more intuitive manipulation.
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| # How It Works
 | ||
| 
 | ||
| btrtile organizes clients using a binary tree data structure that represents splits either vertically or horizontally.
 | ||
| 
 | ||
| When a new client appears:
 | ||
| 1. **Focused Client Detection**  
 | ||
|    btrtile checks your pointer location to find which client (if any) you’re interacting with.
 | ||
| 2. **Split Creation**  
 | ||
|    - If there’s a focused client, btrtile creates a split node around it, placing the new client on the side where your pointer is.  
 | ||
| 
 | ||
| 3. **Ratio Management**  
 | ||
|    Each split node has a `split_ratio` (defaulting to 0.5). This ratio defines how much space is allocated to each child node. You can adjust this ratio using keyboard or mouse actions.
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| # What It Doesn’t Handle
 | ||
| 
 | ||
| - **Suckless philosophy**
 | ||
|   - Yea, it's a bloat. I tried to hide the suck inside a single file as much I could. While this approach is not ideal, it's how it's at least for now.
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| # Configuring btrtile
 | ||
| 
 | ||
| btrtile adds couple variables to config.h to fine tune the mouse resizing of tiled clients.
 | ||
| 
 | ||
| 1. **resize_factor**
 | ||
| 	- A multiplier to transfer pointer movement to client weight ratio. Depends heavily on mouse sensivity.  
 | ||
|       Defaults to 0.0002f.
 | ||
| 
 | ||
| 2. **resize_interval_ms**
 | ||
| 	- A time based resize call limiter. Depends on framerate and screen refresh rate.   
 | ||
|       Defaults to 16ms. (~60 resize updates per second)
 | ||
| 
 | ||
| Fine tune these values to find the best values for your setup, smoother resizing can significally increase cpu overhead.  
 | ||
| If mouse resizing feels sluggish, you can try compiling dwl with more aggressive optimization flags like -O2/-O3. 
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| # Patch recommendations
 | ||
| 
 | ||
| 1. **Patches that I use with my btrtile**
 | ||
|      
 | ||
|    - [focusdir](https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/focusdir)  
 | ||
|      Great patch to move focus between clients.
 | ||
| 
 | ||
|    - [rotatetags](https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/rotatetags)  
 | ||
|      Good patch to rotate the view or shift clients between tags.
 | ||
| 
 | ||
|    - [warpcursor](https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/warpcursor)  
 | ||
|      Moves cursor location to focused client.
 | ||
| 
 | ||
|    - [pertag](https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/pertag)  
 | ||
|      Allows each tag to have individual layout setups.
 | ||
| 
 | ||
|    - [gaps](https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/gaps)  
 | ||
|      Add gaps between clients.
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| ### Download
 | ||
| - [git branch](https://codeberg.org/julmajustus/dwl/src/branch/btrtile-dev) 
 | ||
| - [0.7](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/btrtile/btrtile-v0.7.patch)
 | ||
| - [0.7 WITH gaps](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/btrtile/btrtile-v0.7-gaps.patch)
 | ||
| 
 | ||
| ### Authors
 | ||
| - [julmajustus](https://codeberg.org/julmajustus)
 | 
