You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

313 lines
10 KiB

Currently, there are **8** layouts.
lain/layout
.
|-- termfair
|-- centerfair
|-- cascade
|-- cascadetile
|-- centerwork
|-- uselessfair
|-- uselesspiral
`-- uselesstile
Just add your favourites to ``layouts`` table:
layouts =
{
...
lain.layout.termfair,
lain.layout.uselesstile,
...
}
Or set them on specific tags like this:
awful.layout.set(lain.layout.uselessfair, tags[1][7])
How do layouts work?
=========================
termfair
--------
I do a lot of work on terminals. The common tiling algorithms usually
maximize windows, so you'll end up with a terminal that has about 200
columns or more. That's way too much. Have you ever read a manpage in a
terminal of this size?
This layout restricts the size of each window. Each window will have the
same width but is variable in height. Furthermore, windows are
left-aligned. The basic workflow is as follows (the number above the
screen is the number of open windows, the number in a cell is the fixed
number of a client):
(1) (2) (3)
+---+---+---+ +---+---+---+ +---+---+---+
| | | | | | | | | | | |
| 1 | | | -> | 2 | 1 | | -> | 3 | 2 | 1 | ->
| | | | | | | | | | | |
+---+---+---+ +---+---+---+ +---+---+---+
(4) (5) (6)
+---+---+---+ +---+---+---+ +---+---+---+
| 4 | | | | 5 | 4 | | | 6 | 5 | 4 |
+---+---+---+ -> +---+---+---+ -> +---+---+---+
| 3 | 2 | 1 | | 3 | 2 | 1 | | 3 | 2 | 1 |
+---+---+---+ +---+---+---+ +---+---+---+
The first client will be located in the left column. When opening
another window, this new window will be placed in the left column while
moving the first window into the middle column. Once a row is full,
another row above it will be created.
Default number of columns and rows are respectively taken from `nmaster`
and `ncol` values in `awful.tag`, but you can set your own.
For example, this sets `termfair` to 3 columns and at least 1 row:
lain.layout.termfair.nmaster = 3
lain.layout.termfair.ncol = 1
centerfair
----------
Similar to `termfair`, but with fixed number of vertical columns. Cols are centerded until there are `nmaster` columns, then windows are stacked as slaves, with possibly `ncol` clients per column at most.
(1) (2) (3)
+---+---+---+ +-+---+---+-+ +---+---+---+
| | | | | | | | | | | | |
| | 1 | | -> | | 1 | 2 | | -> | 1 | 2 | 3 | ->
| | | | | | | | | | | | |
+---+---+---+ +-+---+---+-+ +---+---+---+
(4) (5)
+---+---+---+ +---+---+---+
| | | 3 | | | 2 | 4 |
+ 1 + 2 +---+ -> + 1 +---+---+
| | | 4 | | | 3 | 5 |
+---+---+---+ +---+---+---+
Like `termfair`, default number of columns and rows are respectively taken from `nmaster`
and `ncol` values in `awful.tag`, but you can set your own.
For example:
lain.layout.centerfair.nmaster = 3
lain.layout.centerfair.ncol = 1
cascade
-------
Cascade all windows of a tag.
You can control the offsets by setting these two variables:
lain.layout.cascade.cascade_offset_x = 64
lain.layout.cascade.cascade_offset_y = 16
The following reserves space for 5 windows:
lain.layout.cascade.nmaster = 5
That is, no window will get resized upon the creation of a new window,
unless there's more than 5 windows.
cascadetile
-----------
Similar to `awful.layout.suit.tile` layout, however, clients in the slave
column are cascaded instead of tiled.
Left column size can be set, otherwise is controlled by `mwfact` of the
tag. Additional windows will be opened in another column on the right.
New windows are placed above old windows.
Whether the slave column is placed on top of the master window or not is
controlled by the value of `ncol`. A value of 1 means "overlapping slave column"
and anything else means "don't overlap windows".
Usage example:
lain.layout.cascadetile.cascade_offset_x = 2
lain.layout.cascadetile.cascade_offset_y = 32
lain.layout.cascadetile.extra_padding = 5
lain.layout.cascadetile.nmaster = 5
lain.layout.ncol = 1
`extra_padding` reduces the size of the master window if "overlapping
slave column" is activated. This allows you to see if there are any
windows in your slave column.
Setting `cascade_offset_x` to a very small value or even 0 is reccommended to avoid wasting space.
centerwork
----------
You start with one window, centered horizontally:
+--------------------------+
| +----------+ |
| | | |
| | | |
| | | |
| | MAIN | |
| | | |
| | | |
| | | |
| | | |
| +----------+ |
+--------------------------+
This is your main working window. You do most of the work right here.
Sometimes, you may want to open up additional windows. They're put in
the following four slots:
+--------------------------+
| +---+ +----------+ +---+ |
| | | | | | | |
| | 0 | | | | 1 | |
| | | | | | | |
| +---+ | MAIN | +---+ |
| +---+ | | +---+ |
| | | | | | | |
| | 2 | | | | 3 | |
| | | | | | | |
| +---+ +----------+ +---+ |
+--------------------------+
Yes, the number "four" is fixed. In total, you can only have five open
windows with this layout. Additional windows are not managed and set to
floating mode. **This is intentional**.
You can set the order of the four auxiliary windows. This is the default
configuration:
lain.layout.centerwork.top_left = 0
lain.layout.centerwork.top_right = 1
lain.layout.centerwork.bottom_left = 2
lain.layout.centerwork.bottom_right = 3
This means: The bottom left slot will be occupied by the third window
(not counting the main window). Suppose you want your windows to appear
in this order:
+--------------------------+
| +---+ +----------+ +---+ |
| | | | | | | |
| | 3 | | | | 0 | |
| | | | | | | |
| +---+ | MAIN | +---+ |
| +---+ | | +---+ |
| | | | | | | |
| | 2 | | | | 1 | |
| | | | | | | |
| +---+ +----------+ +---+ |
+--------------------------+
This would require you to use these settings:
lain.layout.centerwork.top_left = 3
lain.layout.centerwork.top_right = 0
lain.layout.centerwork.bottom_left = 2
lain.layout.centerwork.bottom_right = 1
*Please note:* If you use Awesome's default configuration, navigation in
this layout may be very confusing. How do you get from the main window
to satellite ones depends on the order in which the windows are opened.
Thus, use of `awful.client.focus.bydirection()` is suggested.
Here's an example:
globalkeys = awful.util.table.join(
...
awful.key({ modkey }, "j",
function()
awful.client.focus.bydirection("down")
if client.focus then client.focus:raise() end
end),
awful.key({ modkey }, "k",
function()
awful.client.focus.bydirection("up")
if client.focus then client.focus:raise() end
end),
awful.key({ modkey }, "h",
function()
awful.client.focus.bydirection("left")
if client.focus then client.focus:raise() end
end),
awful.key({ modkey }, "l",
function()
awful.client.focus.bydirection("right")
if client.focus then client.focus:raise() end
end),
...
)
uselessfair, uselesspiral & uselesstile
---------------------------------------
These are duplicates of the stock `fair`, `spiral` and `tile` layouts.
However, "useless gaps" (see below) have been added.
Useless gaps
============
Useless gaps are gaps between windows. They are "useless" because they
serve no special purpose despite increasing overview. I find it easier
to recognize window boundaries if windows are set apart a little bit.
The `uselessfair` layout, for example, looks like this:
+================+
# #
# +---+ +---+ #
# | 1 | | | #
# +---+ | | #
# | 3 | #
# +---+ | | #
# | 2 | | | #
# +---+ +---+ #
# #
+================+
All of lain layouts provide useless gaps. To set the width of the gaps,
you have to add an item called `useless_gap_width` in your `theme.lua`.
If it doesn't exist, the width will default to 0.
Example:
theme.useless_gap_width = 10
`uselesstile` patches
=====================
xmonad-like
-----------
If you want to have uselesstile behave like xmonad, with internal gaps two times wider than external ones, replace `lain/layout/uselesstile` with [this](https://gist.github.com/copycat-killer/9e56dcfbe66bfe14967c).
inverted master
---------------
Want to invert master window position? Use [this](https://gist.github.com/copycat-killer/c59dc59c9f99d98218eb) version. You can set `single_gap` with `width` and `height` in your `theme.lua`, in order to define the window geometry when there's only one client, otherwise it goes maximized. An example:
theme.single_gap = { width = 600, height = 100 }
What about layout icons?
========================
They are located in ``lain/icons/layout``.
To use them, add lines to your ``theme.lua`` like this:
theme.lain_icons = os.getenv("HOME") .. "/.config/awesome/lain/icons/layout/default/"
theme.layout_termfair = theme.lain_icons .. "termfairw.png"
theme.layout_cascade = theme.lain_icons .. "cascadew.png"
theme.layout_cascadetile = theme.lain_icons .. "cascadetilew.png"
theme.layout_centerwork = theme.lain_icons .. "centerworkw.png"
Credits goes to [Nicolas Estibals](https://github.com/nestibal) for creating
layout icons for default theme.
You can use them as a template for your custom versions.
[<- home](https://github.com/copycat-killer/lain/wiki)