]> git.madduck.net Git - etc/awesome.git/blob - layout/centerwork.lua

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

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