index.md - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
index.md (8737B) | |
--- | |
1 xtile | |
2 ===== | |
3 | |
4 Description | |
5 ----------- | |
6 This patch implements a generalization of the tile layout which adds two | |
7 attributes (direction and fact) to three areas (global, master, stack). … | |
8 global area is the entire allocatable visual space and it's subdivided i… | |
9 master and stack subareas. | |
10 | |
11 The direction of the global area controls the position of the master area | |
12 relatively to the stack area and it can be one of `DirHor` (traditional … | |
13 stack), `DirVer` (bottom stack), `DirRotHor` (left stack) and `DirRotVer… | |
14 stack). The direction of the master and of the stack areas are independe… | |
15 set and can be one of `DirHor` and `DirVer`. This combines to a total of | |
16 4\*2\*2=16 layouts. | |
17 | |
18 The fact numbers indicate the relative size of the first subarea/client … | |
19 the direction of the considered area (i.e. width for `DirHor` and `DirRo… | |
20 and height for `DirVer` and `DirRotVer`). A fact of 1 means that the fir… | |
21 subarea/client is on par the rest, while a fact of 2 means that its size… | |
22 double the size of each of the remaining subareas/clients, etc. So the f… | |
23 the global area is similar to the traditional mfact in the sense that it | |
24 manages the relative allocation of visual space between the master and s… | |
25 subareas, while the fact for the master area stands for the relative imp… | |
26 of the first master client against the rest of masters and, similarly, t… | |
27 for the stack area stands for the importance of the first slave client in | |
28 relation to the rest of slaves. | |
29 | |
30 xtile adds two new commands to dwm: `setdir` and `setfact` (which supers… | |
31 `setmfact`). Both commands take an array of three values (of type `int` … | |
32 `setdir` and `float` for `setfact`), one value for each area (the first … | |
33 the global area, the second one for the master area and the third one fo… | |
34 stack area). If you pass the value `v` as `INC(v)` it will be taken as a | |
35 relative increment to be added to the current value, otherwise it will b… | |
36 as an absolute value. Usually the resulting value will be truncated to t… | |
37 valid range of values for each area/attribute combination, but relative | |
38 increments for directions wrap around the limits of the valid range. Not… | |
39 that INC(0) means "do nothing here", so it gives you a way to easily mod… | |
40 value for some area while leaving the rest untouched. | |
41 | |
42 Default key bindings | |
43 -------------------- | |
44 The areas are selected by modifiers as follows: | |
45 | |
46 Modifier Area | |
47 -------------------------------------------------------- | |
48 MODKEY Global | |
49 MODKEY+Shift Master | |
50 MODKEY+Control Stack | |
51 MODKEY+Shift+Control All three areas simultaneously | |
52 | |
53 Each of the modifiers then combines with each of the following keys up t… | |
54 total of 4\*3=12 key bindings: | |
55 | |
56 Key Function | |
57 ------------------------------ | |
58 r Rotate direction | |
59 h Decrement fact by 10%. | |
60 l Increment fact by 10%. | |
61 | |
62 There are two provided default "presets" or "schemas" also: | |
63 | |
64 Modifier Key Preset | |
65 --------------------------------------: | |
66 MODKEY+Shift t Right stack | |
67 MODKEY+Control t Bottom stack | |
68 | |
69 These presets allow to quickly switch between different no-nonsense tili… | |
70 avoiding the need to rotate through all the nonsense combinations in-bet… | |
71 But notice that `MODKEY+Shift+Control+r` (i.e. simultaneously rotate all… | |
72 areas) usually produces sensible layouts (due to the way directions were | |
73 designed to rotate). | |
74 | |
75 You can also easily define your own presets by calling `setdir` and `set… | |
76 as needed. For example, here is the configuration code for the default p… | |
77 described above: | |
78 | |
79 { MODKEY|ShiftMask, XK_t, setdirs, {.v = (int[]){ DirHor, DirV… | |
80 { MODKEY|ControlMask, XK_t, setdirs, {.v = (int[]){ DirVer, DirH… | |
81 | |
82 Layout symbol | |
83 ------------- | |
84 | |
85 The layout symbol will probably look cryptic at first sight but it's very | |
86 easily decoded. It consists of three characters, one for the direction o… | |
87 area: | |
88 | |
89 * Global area: '<', '>', 'v', '^', just think of it as an arrow that poi… | |
90 direction of the master area. | |
91 * Master area: '|' for vertically tiled masters and '-' for horizontally… | |
92 * Stack area: same as for the master area. | |
93 | |
94 For example, '<||' stands for the default right stack tile provided by d… | |
95 '^--' stands for bstack (as defined by the bottom stack patch). | |
96 | |
97 Digressions | |
98 ----------- | |
99 | |
100 ### Why facts per area? | |
101 | |
102 There is some arbitrariness in the way facts are defined by xtile: why f… | |
103 for the first master and the first slave and not, say, for the first two | |
104 clients instead? Considering that most real life layouts will have one o… | |
105 masters and a variable number of slaves, the road xtile took will enable… | |
106 user to effectively control the relative size of the three/four most imp… | |
107 clients in a very intuitive way that built on his previous understanding… | |
108 mfact and the master and stack area concepts. OTOH it's not clear to me … | |
109 allow the specification of facts for the first two clients in an intuiti… | |
110 | |
111 * If there is only one master this alternative approach is equivalent to | |
112 xtile's one. | |
113 * If there are two masters, only one fact will be required to specify th… | |
114 of the master area that belongs to each one, so what to do with the se… | |
115 fact? | |
116 * If this second fact is taken as the share of the second master vs the … | |
117 of the rest (the slaves), it's not clear how to define these inter-are… | |
118 | |
119 ### Why not deck area? | |
120 | |
121 One obvious additional generalization would have been to extrapolate the | |
122 nmaster idea to all three areas, or at least to the stack area. So if you | |
123 allowed only m masters and n slaves you would end up with m+n tiled wind… | |
124 with the rest of the clients in the current tagset stacked or decked "be… | |
125 the last tiled client. flextile, clients-per-tag and deck patches provide | |
126 variations on this kind of layout. I've also implemented a version of xt… | |
127 that supports it and even subsumes monocle, but I think this promotes a … | |
128 pattern of usage. Coupled with stack manipulation operations as the ones | |
129 provided by the stacker or push patches, there is the temptation to mana… | |
130 visibility by moving the desired clients in the current tagset to the fi… | |
131 visible positions of the focus stack (not to be confused with the stack … | |
132 There are a number of problems with this approach: | |
133 | |
134 * The stack is global to dwm, so pushing around clients in one tag will | |
135 rearrange them in other tags also. This could become a problem if you … | |
136 much on explicit stack management. | |
137 | |
138 * The deck area badly violates the principle of least surprise. If you o… | |
139 change focus sequentially by using `mod-j`/`mod-k` there is no way to … | |
140 deck at a client different to the last/first decked one. If you use th… | |
141 or the `focusstack` command provided by the stacker patch to jump dire… | |
142 the deck to a non-decked client, each time you reach the deck again by… | |
143 `mod-j`/`mod-k` the visible decked client will be replaced by the firs… | |
144 decked one. In general, there is a devilish interplay of the focus sta… | |
145 the z-stack that makes the deck unusable as a tabbed view of the decked | |
146 clients, at least for more than one or two decked clients. | |
147 | |
148 Fortunately, dwm provides a much better mechanism to restrict visibility… | |
149 IMO there is no need to provide a half-assed alternative to one of dwm's | |
150 strongest selling points. | |
151 | |
152 Mandatory dependencies: | |
153 * [pertag](../pertag/): we all know this one. | |
154 | |
155 Download | |
156 -------- | |
157 * [dwm-xtile-6.2.diff](dwm-xtile-6.2.diff) (11/06/2020) | |
158 * [dwm-6.0-xtile.diff](dwm-6.0-xtile.diff) | |
159 | |
160 Recommended complementary patches: | |
161 ---------------------------------- | |
162 Gaps | |
163 ---- | |
164 Added a new patch with separate inner and outer gaps which can be adjust… | |
165 at runtime. Also includes an option to disable gaps when only one window… | |
166 is open (on by default.) | |
167 | |
168 `Mod+Shift+i/o - increase size (i - inner, o - outer)` | |
169 `Mod+Control+i/o - decrease size (i - inner, o - outer)` | |
170 `Mod+Shift+Control+i/o - disable gaps (i - inner, o - outer)` | |
171 | |
172 Download | |
173 -------- | |
174 * [dwm-xtile-gaps-6.2.diff](dwm-xtile-gaps-6.2.diff) (15/06/2020) | |
175 * Visit [gaps](../gaps/) page for older versions. | |
176 | |
177 Stacker | |
178 ------- | |
179 A patch to better accommodate the clients to the more elaborate layouts … | |
180 by xtile. But I would add: subject to the caveats that I've expressed ab… | |
181 | |
182 Download | |
183 -------- | |
184 * Visit [stacker](../stacker/) page to download. (6.2 version available) | |
185 | |
186 Patches related to xtile: | |
187 [bottom stack](../bottomstack/), [flextile](../flextile/), | |
188 [cfacts](../cfacts/), [stackmfact](../stackmfact/). | |
189 | |
190 | |
191 Authors | |
192 ------- | |
193 * MLquest8 (gaps and update for 6.2) (miskuzius at gmail.com) | |
194 * Carlos Pita (memeplex) <[email protected]> |