local math = math local mylayout = {} mylayout.name = "horizontal" function mylayout.arrange(p) local area = p.workarea local t = p.tag or screen[p.screen].selected_tag local mwfact = t.master_width_factor local nmaster = math.min(t.master_count, #p.clients) local nslaves = #p.clients - nmaster local master_area_height = area.height * mwfact local slave_area_height = area.height - master_area_height -- Special case: no slaves if nslaves == 0 then master_area_height = area.height slave_area_height = 0 end -- Special case: no masters if nmaster == 0 then master_area_height = 0 slave_area_height = area.height end -- itearte through masters for idx = 1, nmaster do local c = p.clients[idx] local g = { x = area.x + (idx - 1) * (area.width / nmaster), y = area.y, width = area.width / nmaster, height = master_area_height, } p.geometries[c] = g end -- iterate through slaves for idx = 1, nslaves do local c = p.clients[idx + nmaster] local g = { x = area.x, y = area.y + master_area_height + (idx - 1) * (slave_area_height / nslaves), width = area.width, height = slave_area_height / nslaves, } p.geometries[c] = g end end return mylayout