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
313 lines
10 KiB
10 years ago
|
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)
|