-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcenterhwork.lua
136 lines (116 loc) · 4.48 KB
/
centerhwork.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
--[[
Licensed under GNU General Public License v2
* (c) 2015, Joerg Jaspert
* (c) 2014, projektile
* (c) 2013, Luke Bonham
* (c) 2010-2012, Peter Hofmann
--]]
local awful = require("awful")
local beautiful = require("beautiful")
local tonumber = tonumber
local centerhwork =
{
name = "centerhwork",
top_left = 0,
top_right = 1,
bottom_left = 2,
bottom_right = 3
}
function centerhwork.arrange(p)
-- A useless gap (like the dwm patch) can be defined with
-- beautiful.useless_gap_width .
local useless_gap = tonumber(beautiful.useless_gap_width) or 0
-- A global border can be defined with
-- beautiful.global_border_width
local global_border = tonumber(beautiful.global_border_width) or 0
if global_border < 0 then global_border = 0 end
-- Screen.
local wa = p.workarea
local cls = p.clients
-- Borders are factored in.
wa.height = wa.height - (global_border * 2)
wa.width = wa.width - (global_border * 2)
wa.x = wa.x + global_border
wa.y = wa.y + global_border
-- Width of main column?
local t = awful.tag.selected(p.screen)
local mwfact = awful.tag.getmwfact(t)
if #cls > 0
then
-- Main column, fixed width and height.
local c = cls[1]
local g = {}
local mainhei = math.floor(wa.height * mwfact)
local slaveLwid = math.floor(wa.width / 2 )
local slaveRwid = wa.width - slaveLwid
local slavehei = wa.height - mainhei
local slaveThei = math.floor(slavehei / 2)
local slaveBhei = slavehei - slaveThei
local Lhalfgap = math.floor(useless_gap / 2)
local Rhalfgap = useless_gap - Lhalfgap
g.height = mainhei - 2*c.border_width
g.width = wa.width - 2*useless_gap - 2*c.border_width
g.x = wa.x + useless_gap
g.y = wa.y + slaveThei
if g.width < 1 then g.width = 1 end
if g.height < 1 then g.height = 1 end
c:geometry(g)
-- Auxiliary windows.
if #cls > 1
then
local at = 0
for i = 2,#cls
do
-- It's all fixed. If there are more than 5 clients,
-- those additional clients will float. This is
-- intentional.
if at == 4
then
break
end
c = cls[i]
g = {}
if i - 2 == centerhwork.top_left
then
-- top left
g.x = wa.x + useless_gap
g.y = wa.y + useless_gap
g.width = slaveLwid - useless_gap - Lhalfgap - 2*c.border_width
g.height = slaveThei - 2*useless_gap - 2*c.border_width
elseif i - 2 == centerhwork.top_right
then
-- top right
g.x = wa.x + slaveLwid + Rhalfgap
g.y = wa.y + useless_gap
g.width = slaveRwid - useless_gap - Rhalfgap - 2*c.border_width
g.height = slaveThei - 2*useless_gap - 2*c.border_width
elseif i - 2 == centerhwork.bottom_left
then
-- bottom left
g.x = wa.x + useless_gap
g.y = wa.y + mainhei + slaveThei + useless_gap
g.width = slaveLwid - useless_gap - Lhalfgap - 2*c.border_width
g.height = slaveBhei - 2*useless_gap - 2*c.border_width
elseif i - 2 == centerhwork.bottom_right
then
-- bottom right
g.x = wa.x + slaveLwid + Rhalfgap
g.y = wa.y + mainhei + slaveThei + useless_gap
g.width = slaveRwid - useless_gap - Rhalfgap - 2*c.border_width
g.height = slaveBhei - 2*useless_gap - 2*c.border_width
end
if g.width < 1 then g.width = 1 end
if g.height < 1 then g.height = 1 end
c:geometry(g)
at = at + 1
end
-- Set remaining clients to floating.
for i = (#cls - 1 - 4),1,-1
do
c = cls[i]
awful.client.floating.set(c, true)
end
end
end
end
return centerhwork