layout-machi/README.md

3.6 KiB

layout-machi

A manual layout for Awesome with a rapid interactive editor.

Why?

TL;DR --- I want the control of my layout.

  1. Dynamic tiling is an overkill, since tiling is only useful for persistent windows, and people extensively use hibernate/sleep these days.
  2. I don't want to have all windows moving around whenever a new window shows up.
  3. I want to have a flexible layout such that I can quickly adjust to whatever I need.

Use the layout

Use layout = layout_machi.layout.create(name, editor) to instantiate the layout with an editor object (see below on creating the editor). The editor will restore the last regions of the layouts based on their names.

Editor

Call editor = layout_machi.editor.create() to create an editor that can interactively edit the current layout by calling editor.start_interactive().

The layout editing command

The editing starts with the open area of the entire workarea, takes commands to split the current area into multiple sub-areas, then recursively edits each of them. The editor is keyboard driven, each command is a key with optional digits (namely D) before it as parameter (or multiple parameters depending on the command).

  1. Up/Down: restore to the history command sequence
  2. h/v: split the current region horizontally/vertically into #D regions. The split will respect the ratio of digits in D.
  3. w: Take the last two digits from D as D = ...AB (1 if D is shorter than 2 digits), and split the current region equally into A rows and B columns. If no digits are provided at all, behave the same as Space.
  4. s: shift the current editing region with other open regions. If digits are provided, shift for that many times.
  5. Space or -: Without parameters, close the current region and move to the next open region. With digits, set the maximum depth of splitting (the default depth is 2).
  6. Enter/.: close all open regions. When all regions are closed, press Enter will save the layout and exit the editor.
  7. Backspace: undo the last command.
  8. Escape: exit the editor without saving the layout.

For examples:

h-v

11 22
11 22
11
11 33
11 33

hvv (or 22w)

11 33
11 33

22 44
22 44

131h2v-12v

Details:

  • 131h: horizontally split the initial region (entire desktop) to the ratio of 1:3:1
  • For the first 1 part:
    • 2v: vertically split the region to the ratio of 2:1
  • -: skip the editing of the middle 3 part
  • For the right 1 part:
    • 12v: split the right part vertically to the ratio of 1:2

Tada!

11 3333 44
11 3333 44
11 3333
11 3333 55
   3333 55
22 3333 55
22 3333 55

Persistent history

By default, the last 100 command sequences are stored in ~/.machi_history. To change that, please refer to editor.lua. (XXX more documents)

Switcher

Calling layout_machi.switcher.start() will create a switcher supporting the following keys:

  • Arrow keys: move focus into other regions by the direction.
  • Shift + arrow keys: move the focused window to other regions by the direction.
  • Tab: switch windows in the same regions.

So far, the key binding is not configurable. One has to modify the source code to change it.

Other functions

layout_machi.editor.fit_region(c, cycle = false) will fit a floating client into the closest region. If cycle is true, it then moves the window by cycling all regions.

Caveats

beautiful.useless_gap is handled differently in layout-machi and it doesn't cooperate well with the standard way. In my usage I set gap = 0 for the tags and let machi to handle the gaps.

TODO

  • Tabs on regions?

License

Apache 2.0 --- See LICENSE