2013-09-07 12:16:55 +02:00
|
|
|
Currently, there are **7** layouts.
|
|
|
|
|
|
|
|
lain/layout
|
|
|
|
.
|
|
|
|
|-- cascade
|
|
|
|
|-- cascadetile
|
|
|
|
|-- centerwork
|
|
|
|
|-- termfair
|
|
|
|
|-- 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?
|
|
|
|
=========================
|
|
|
|
|
|
|
|
cascade
|
|
|
|
-------
|
|
|
|
|
|
|
|
Cascade all windows of a tag.
|
|
|
|
|
|
|
|
You can control the offsets by setting those 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
|
2013-09-07 12:20:25 +02:00
|
|
|
lain.layout.cascadetile.nmaster = 5
|
|
|
|
lain.layout.ncol = 1
|
2013-09-07 12:16:55 +02:00
|
|
|
|
|
|
|
`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(
|
2013-09-07 12:20:25 +02:00
|
|
|
...
|
2013-09-07 12:16:55 +02:00
|
|
|
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),
|
|
|
|
...
|
|
|
|
)
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
uselessfair, uselesspiral & uselesstile
|
|
|
|
---------------------------------------
|
|
|
|
These are duplicates of the stock `fair`, `spiral` and `tile` layouts.
|
2013-09-07 12:20:25 +02:00
|
|
|
|
2013-09-07 12:16:55 +02:00
|
|
|
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 = "5"
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
2013-09-07 14:31:25 +02:00
|
|
|
You can use them as a template for your custom versions.
|
|
|
|
|
|
|
|
[<- home](https://github.com/copycat-killer/lain/wiki)
|