@@ -200,3 +200,117 @@ bug)). If lower case matches, do it, if uppercase matches something,
200
200
then make sure that's ok and do it but with the
201
201
` resize-window-uppercase-argument ` rather than
202
202
` resize-window-lowercase-argument ` .
203
+
204
+ ### More about the window configurations stack ##
205
+
206
+ Some explanations are due about the stack. Here are some details you
207
+ may find interesting and clarifying.
208
+
209
+ ## Current window configuration ##
210
+
211
+ The current window configuration is what you are looking at in the
212
+ screen. Think of it like a windows layout. It may be or may be not
213
+ equal to the first element of the stack. The former means it is
214
+ unmodified, hence it is equal to a saved configuration in the
215
+ stack. The latter means that it is modified, and not saved in the
216
+ stack yet. The current window configuration is modified when a window
217
+ is switched, split, resized, or deleted.
218
+
219
+ A modified current window configuration prints the modification flag
220
+ ` * ` to the notification area and an unmodified one prints ` = ` .
221
+
222
+ ## Stack navigation: shifting elements ##
223
+
224
+ The stack is a spinning wheel, with no real beginning or end. The
225
+ active element is the first one. Movements along the stack consist
226
+ into shifting the elements. Hitting ` < ` (shift left) pops the last
227
+ element and pushes it to the beginning of the stack, making it the
228
+ first. Hitting ` > ` (shift right) pops the first element and pushes
229
+ it to the end of the stack, making the second element the first.
230
+
231
+ Shifting left prints the direction flag ` < ` to the notification area
232
+ and shifting right prints ` > ` .
233
+
234
+ ## Stack update: auto shifting elements ##
235
+
236
+ When the current window configuration is modified, a smart system
237
+ checks the elements in the stack adjacent to the first to see if they
238
+ are equal to the modified configuration. The direction flag suggests
239
+ the order of comparison, i.e. start from the last element when it is
240
+ ` < ` or from the second when it is ` > ` , until a match is found or both
241
+ elements are tested. If a match is found, the stack is shifted in the
242
+ direction of the match (like you hit the corresponding key binding),
243
+ the modification flag is unset, and the direction flag is set to the
244
+ shifting direction.
245
+
246
+ ## Stack update: saving a window configuration ##
247
+
248
+ When the smart system did not find a match, a modified configuration
249
+ may be automatically saved in the stack if trying to modify it again.
250
+ This also triggers the smart system to search in the stack the newly
251
+ modification obtained. Please note that resizing a window is exempted
252
+ from automatically saving a modified configuration.
253
+
254
+ Pressing ` s ` , ` < ` , or ` > ` will also save the modified configuration.
255
+
256
+ The direction flag dictates where configurations are saved. If it is
257
+ ` < ` , save the configuration as the first element. If it is ` > ` , save
258
+ the configuration as the second element, then shift right. This is to
259
+ give you an insight on how to step back to the previous configuration.
260
+ For instance, if there is only a single window and the direction flag
261
+ is ` > ` , when you split the window and hit ` < ` you will be back to the
262
+ single window... suppose there was more than one configuration in the
263
+ stack to begin with... If the direction flag was ` < ` , a split and hit
264
+ on ` > ` will still get you back to the single window, but hitting ` < `
265
+ instead would have shifted to the configuration expected to be found
266
+ on the left of the single window.
267
+
268
+ ```
269
+ config A config C
270
+ ----- -----
271
+ | A | |-C-| initial condition, unmodified configuration A
272
+ ----- -----
273
+
274
+ notification area: [=>] (modified flag is =, direction flag is >)
275
+
276
+
277
+ hit 3 and split A into
278
+ modified configuration
279
+ (set modified flag: *)
280
+ / |
281
+ / |
282
+ 3 planned
283
+ | insertion
284
+ | / hit s to save the modified configuration or
285
+ ----- / ----- you may even hit < to save and step back to A
286
+ | A | ----- |-C-|
287
+ ----- | | | ----- here (silent right shift [*>] from A on save)
288
+ \ ----- /
289
+ \ /
290
+ saving pushes it
291
+
292
+ notification area: [*>] (modified flag is *, direction flag is >)
293
+
294
+
295
+ final result
296
+ ----- ----- -----
297
+ | | | |-C-| | A | to step back to A hit <
298
+ ----- ----- -----
299
+
300
+ notification area: [=>] (modified flag is =, direction flag is >)
301
+
302
+
303
+ shifting left
304
+ ----- ----- -----
305
+ | A | | | | |-C-| stepped back to A, the direction flag changed
306
+ ----- ----- -----
307
+
308
+ notification area: [<=] (modified flag is =, direction flag is <)
309
+
310
+ ```
311
+
312
+ ## Stack update: dropping a window configuration ##
313
+
314
+ When a configuration is dropped from the stack, the stack is shifted
315
+ in the direction dictated by the direction flag, like pressing either
316
+ ` < ` or ` > ` .
0 commit comments