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:

layout.centerwork: improved code
authorLuca CPZ <luca.cpz@gmail.com>
Thu, 15 Feb 2018 13:05:26 +0000 (14:05 +0100)
committerLuca CPZ <luca.cpz@gmail.com>
Thu, 15 Feb 2018 13:05:26 +0000 (14:05 +0100)
layout/centerwork.lua

index d1394a1dbe55008d6d1b6814a53ab49e1904d466..cb8370933b660ae496cf562780f7c477f871f4f4 100644 (file)
@@ -9,25 +9,23 @@
 
 --]]
 
-local floor  = math.floor
-local screen = screen
+local floor, max, screen = math.floor, math.max, screen
 
 local centerwork = {
-    name         = "centerwork",
-    horizontal   = { name = "centerworkh" }
+    name       = "centerwork",
+    horizontal = { name = "centerworkh" }
 }
 
-local function do_centerwork(p, orientation)
-    local t = p.tag or screen[p.screen].selected_tag
-    local wa = p.workarea
+local function arrange(p, layout)
+    local t   = p.tag or screen[p.screen].selected_tag
+    local wa  = p.workarea
     local cls = p.clients
 
     if #cls == 0 then return end
 
-    local c = cls[1]
-    local g = {}
+    local c, g = cls[1], {}
 
-    -- Main column, fixed width and height.
+    -- Main column, fixed width and height
     local mwfact          = t.master_width_factor
     local mainhei         = floor(wa.height * mwfact)
     local mainwid         = floor(wa.width * mwfact)
@@ -42,7 +40,7 @@ local function do_centerwork(p, orientation)
 
     local slaveFirstDim, slaveSecondDim = 0, 0
 
-    if orientation == "vertical" then
+    if layout.name == "centerwork" then -- vertical
         if nbrFirstSlaves  > 0 then slaveFirstDim  = floor(wa.height / nbrFirstSlaves) end
         if nbrSecondSlaves > 0 then slaveSecondDim = floor(wa.height / nbrSecondSlaves) end
 
@@ -51,7 +49,7 @@ local function do_centerwork(p, orientation)
 
         g.x = wa.x + slaveLwid
         g.y = wa.y
-    else
+    else -- horizontal
         if nbrFirstSlaves  > 0 then slaveFirstDim  = floor(wa.width / nbrFirstSlaves) end
         if nbrSecondSlaves > 0 then slaveSecondDim = floor(wa.width / nbrSecondSlaves) end
 
@@ -62,92 +60,76 @@ local function do_centerwork(p, orientation)
         g.y = wa.y + slaveThei
     end
 
-    if g.width  < 1 then g.width  = 1 end
-    if g.height < 1 then g.height = 1 end
+    g.width  = max(g.width, 1)
+    g.height = max(g.height, 1)
 
     p.geometries[c] = g
 
-    -- Auxiliary windows.
+    -- Auxiliary clients
     if #cls <= 1 then return end
-    for i = 2,#cls do
-        local c = cls[i]
-        local g = {}
+    for i = 2, #cls do
+        local c, g = cls[i], {}
+        local idxChecker, dimToAssign
 
         local rowIndex = floor(i/2)
 
-        if orientation == "vertical" then
-            if i % 2 == 0 then
-                -- left slave
-                g.x = wa.x
-                g.y = wa.y + (rowIndex-1)*slaveFirstDim
-
+        if layout.name == "centerwork" then
+            if i % 2 == 0 then -- left slave
+                g.x     = wa.x
+                g.y     = wa.y + (rowIndex - 1) * slaveFirstDim
                 g.width = slaveLwid
 
-                -- if last slave in left row use remaining space for that slave
-                if rowIndex == nbrFirstSlaves then
-                    g.height = wa.y + wa.height - g.y
-                else
-                    g.height = slaveFirstDim
-                end
-            else
-                -- right slave
-                g.x = wa.x + slaveLwid + mainwid
-                g.y = wa.y + (rowIndex-1)*slaveSecondDim
-
+                idxChecker, dimToAssign = nbrFirstSlaves, slaveFirstDim
+            else -- right slave
+                g.x     = wa.x + slaveLwid + mainwid
+                g.y     = wa.y + (rowIndex - 1) * slaveSecondDim
                 g.width = slaveRwid
 
-                -- if last slave in right row use remaining space for that slave
-                if rowIndex == nbrSecondSlaves then
-                    g.height = wa.y + wa.height - g.y
-                else
-                    g.height = slaveSecondDim
-                end
+                idxChecker, dimToAssign = nbrSecondSlaves, slaveSecondDim
             end
-        else
-            if i % 2 == 0 then
-                -- top slave
-                g.x = wa.x + (rowIndex-1)*slaveFirstDim
-                g.y = wa.y
 
-                g.height = slaveThei
-
-                -- if last slave in top row use remaining space for that slave
-                if rowIndex == nbrFirstSlaves then
-                    g.width = wa.x + wa.width - g.x
-                else
-                    g.width = slaveFirstDim
-                end
+            -- if last slave in row, use remaining space for it
+            if rowIndex == idxChecker then
+                g.height = wa.y + wa.height - g.y
             else
-                -- bottom slave
-                g.x = wa.x + (rowIndex-1)*slaveSecondDim
-                g.y = wa.y + slaveThei + mainhei
+                g.height = dimToAssign
+            end
+        else
+            if i % 2 == 0 then -- top slave
+                g.x      = wa.x + (rowIndex - 1) * slaveFirstDim
+                g.y      = wa.y
+                g.height = slaveThei
 
+                idxChecker, dimToAssign = nbrFirstSlaves, slaveFirstDim
+            else -- bottom slave
+                g.x      = wa.x + (rowIndex - 1) * slaveSecondDim
+                g.y      = wa.y + slaveThei + mainhei
                 g.height = slaveBhei
 
-                -- if last slave in bottom row use remaining space for that slave
-                if rowIndex == nbrSecondSlaves then
-                    g.width = wa.x + wa.width - g.x
-                else
-                    g.width = slaveSecondDim
-                end
+                idxChecker, dimToAssign = nbrSecondSlaves, slaveSecondDim
+            end
 
+            -- if last slave in row, use remaining space for it
+            if rowIndex == idxChecker then
+                g.width = wa.x + wa.width - g.x
+            else
+                g.width = dimToAssign
             end
         end
 
-        if g.width  < 1 then g.width  = 1 end
-        if g.height < 1 then g.height = 1 end
+        g.width  = max(g.width, 1)
+        g.height = max(g.height, 1)
 
         p.geometries[c] = g
     end
 end
 
-
-function centerwork.horizontal.arrange(p)
-    return do_centerwork(p, "horizontal")
+function centerwork.arrange(p)
+    return arrange(p, centerwork)
 end
 
-function centerwork.arrange(p)
-    return do_centerwork(p, "vertical")
+function centerwork.horizontal.arrange(p)
+    return arrange(p, centerwork.horizontal)
 end
 
 return centerwork