diff --git a/layouts/fairgaps.lua b/layouts/fairgaps.lua new file mode 100644 index 0000000..0fa65ea --- /dev/null +++ b/layouts/fairgaps.lua @@ -0,0 +1,110 @@ +--------------------------------------------------------------------------- +-- @author Julien Danjou <julien@danjou.info> +-- @copyright 2008 Julien Danjou +-- @release v3.4.11 +--------------------------------------------------------------------------- + +-- Grab environment we need +local ipairs = ipairs +local math = math + +module("layouts.fairgaps") + +local function fair(p, orientation) + local wa = p.workarea + local cls = p.clients + + if #cls > 0 then + local cells = math.ceil(math.sqrt(#cls)) + local strips = math.ceil(#cls / cells) + + local cell = 0 + local strip = 0 + for k, c in ipairs(cls) do + local g = {} + if ( orientation == "east" and #cls > 2 ) + or ( orientation == "south" and #cls <= 2 ) then + if #cls < (strips * cells) and strip == strips - 1 then + g.width = wa.width / (cells - ((strips * cells) - #cls)) + else + g.width = wa.width / cells + end + g.height = wa.height / strips + + g.x = wa.x + cell * g.width + g.y = wa.y + strip * g.height + + else + if #cls < (strips * cells) and strip == strips - 1 then + g.height = wa.height / (cells - ((strips * cells) - #cls)) + else + g.height = wa.height / cells + end + g.width = wa.width / strips + + g.x = wa.x + strip * g.width + g.y = wa.y + cell * g.height + end + + -- Useless gap. + useless_gap = 25 + if useless_gap > 0 + then + -- Top and left clients are shrinked by two steps and + -- get moved away from the border. Other clients just + -- get shrinked in one direction. + + top = false + left = false + + if g.x == wa.x then + top = true + end + + if g.y == wa.y then + left = true + end + + if top then + g.width = g.width - 2 * useless_gap + g.x = g.x + useless_gap + else + g.width = g.width - useless_gap + end + + if left then + g.height = g.height - 2 * useless_gap + g.y = g.y + useless_gap + else + g.height = g.height - useless_gap + end + end + -- End of useless gap. + + + + c:geometry(g) + + cell = cell + 1 + if cell == cells then + cell = 0 + strip = strip + 1 + end + end + end +end + +--- Horizontal fair layout. +-- @param screen The screen to arrange. +horizontal = {} +horizontal.name = "fairhgaps" +function horizontal.arrange(p) + return fair(p, "east") +end + +-- Vertical fair layout. +-- @param screen The screen to arrange. +name = "fairvgaps" +function arrange(p) + return fair(p, "south") +end diff --git a/layouts/init.lua b/layouts/init.lua index ab8c39d..9e85b7a 100644 --- a/layouts/init.lua +++ b/layouts/init.lua @@ -1,3 +1,5 @@ +require("layouts.fairgaps") +require("layouts.spiralgaps") require("layouts.tilegaps") module("layouts") diff --git a/layouts/spiralgaps.lua b/layouts/spiralgaps.lua new file mode 100644 index 0000000..bfc4818 --- /dev/null +++ b/layouts/spiralgaps.lua @@ -0,0 +1,102 @@ +--------------------------------------------------------------------------- +-- @author Uli Schlachter <psychon@znc.in> +-- @copyright 2009 Uli Schlachter +-- @copyright 2008 Julien Danjou +-- @release v3.4.11 +--------------------------------------------------------------------------- + +-- Grab environment we need +local ipairs = ipairs + +module("layouts.spiralgaps") + +local function spiral(p, spiral) + local wa = p.workarea + local cls = p.clients + local n = #cls + + local static_wa = wa + + for k, c in ipairs(cls) do + if k < n then + if k % 2 == 0 then + wa.height = wa.height / 2 + else + wa.width = wa.width / 2 + end + end + + if k % 4 == 0 and spiral then + wa.x = wa.x - wa.width + elseif k % 2 == 0 or + (k % 4 == 3 and k < n and spiral) then + wa.x = wa.x + wa.width + end + + if k % 4 == 1 and k ~= 1 and spiral then + wa.y = wa.y - wa.height + elseif k % 2 == 1 and k ~= 1 or + (k % 4 == 0 and k < n and spiral) then + wa.y = wa.y + wa.height + end + + local wa2 = {} + wa2.x = wa.x + wa2.y = wa.y + wa2.height = wa.height + wa2.width = wa.width + + + -- Useless gap. + useless_gap = 25 + if useless_gap > 0 + then + -- Top and left clients are shrinked by two steps and + -- get moved away from the border. Other clients just + -- get shrinked in one direction. + + top = false + left = false + + if wa2.y == static_wa.y then + top = true + end + + if wa2.x == static_wa.x then + left = true + end + + if top then + wa2.height = wa2.height - 2 * useless_gap + wa2.y = wa2.y + useless_gap + else + wa2.height = wa2.height - useless_gap + end + + if left then + wa2.width = wa2.width - 2 * useless_gap + wa2.x = wa2.x + useless_gap + else + wa2.width = wa2.width - useless_gap + end + end + -- End of useless gap. + + c:geometry(wa2) + end +end + +--- Dwindle layout +dwindle = {} +dwindle.name = "dwindlegaps" +function dwindle.arrange(p) + return spiral(p, false) +end + +--- Spiral layout +name = "spiralgaps" +function arrange(p) + return spiral(p, true) +end + +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80 diff --git a/layouts/tilegaps.lua b/layouts/tilegaps.lua index 0836e06..8624d30 100644 --- a/layouts/tilegaps.lua +++ b/layouts/tilegaps.lua @@ -195,7 +195,7 @@ right.arrange = tile --- The main tile algo, on left. -- @param screen The screen number to tile. left = {} -left.name = "tilegapsleft" +left.name = "tileleftgaps" function left.arrange(p) return tile(p, "left") end @@ -203,7 +203,7 @@ end --- The main tile algo, on bottom. -- @param screen The screen number to tile. bottom = {} -bottom.name = "tilegapsbottom" +bottom.name = "tilebottomgaps" function bottom.arrange(p) return tile(p, "bottom") end @@ -211,7 +211,7 @@ end --- The main tile algo, on top. -- @param screen The screen number to tile. top = {} -top.name = "tilegapstop" +top.name = "tiletopgaps" function top.arrange(p) return tile(p, "top") end diff --git a/rc.lua.holo b/rc.lua.holo index 1bf16c7..3bb3249 100755 --- a/rc.lua.holo +++ b/rc.lua.holo @@ -84,7 +84,7 @@ language = string.gsub(os.getenv("LANG"), ".utf8", "") beautiful.init(active_theme .. "/theme.lua") terminal = "urxvtc" -editor = os.getenv("EDITOR") or "vim" +editor = os.getenv("EDITOR") editor_cmd = terminal .. " -e " .. editor gui_editor = "gvim" browser = "dwb" @@ -186,7 +186,7 @@ clockwidget:set_widget(mytextclock) clockwidget:set_bgimage(beautiful.widget_bg) -- Calendar widget -mytextcalendar = awful.widget.textclock(white .. space .. "%d %B " .. coldef) +mytextcalendar = awful.widget.textclock(white .. space .. "%A %d %B " .. coldef) calendar_icon = wibox.widget.imagebox() calendar_icon:set_image(beautiful.calendar) calendarwidget = wibox.widget.background() diff --git a/rc.lua.rainbow b/rc.lua.rainbow index e957b4c..e34ac90 100755 --- a/rc.lua.rainbow +++ b/rc.lua.rainbow @@ -103,7 +103,9 @@ layouts = awful.layout.suit.fair, -- 3 awful.layout.suit.tile.bottom, -- 4 awful.layout.suit.fair.horizontal, -- 5 - layouts.tilegaps, -- 6 + layouts.tilegaps, -- 6 + layouts.fairgaps, -- 7 + layouts.spiralgaps, -- 8 } -- }}} diff --git a/themes/rainbow/theme.lua b/themes/rainbow/theme.lua index 28cab14..85c74a3 100644 --- a/themes/rainbow/theme.lua +++ b/themes/rainbow/theme.lua @@ -33,7 +33,6 @@ theme.widget_mail_notify = themes_dir .. "/icons/mail_notify. theme.widget_no_net_notify = themes_dir .. "/icons/no_net_notify.png" theme.layout_txt_tile = "[t]" -theme.layout_txt_tilegaps = "[t2]" theme.layout_txt_tileleft = "[l]" theme.layout_txt_tilebottom = "[b]" theme.layout_txt_tiletop = "[tt]" @@ -46,6 +45,10 @@ theme.layout_txt_fullscreen = "[F]" theme.layout_txt_magnifier = "[M]" theme.layout_txt_floating = "[*]" +theme.layout_txt_tilegaps = "[tg]" +theme.layout_txt_fairvgaps = "[fvg]" +theme.layout_txt_spiralgaps = "[sg]" + theme.tasklist_floating = "" theme.tasklist_maximized_horizontal = "" theme.tasklist_maximized_vertical = ""