X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/606a995b90b682b0a9a88d55ecc675bb9ce39700..1bd178f68757099e6c9ccde1992ca5d519ccb8e5:/util/quake.lua diff --git a/util/quake.lua b/util/quake.lua index 9f703b0..e54b664 100644 --- a/util/quake.lua +++ b/util/quake.lua @@ -10,7 +10,8 @@ local awful = require("awful") local capi = { client = client, mouse = mouse, screen = screen, - timer = timer } + timer = timer or require("gears.timer") } +local math = { floor = math.floor } local string = string local pairs = pairs @@ -31,7 +32,7 @@ function quake:display() local i = 0 for c in awful.client.iterate(function (c) -- c.name may be changed! - return c.instance == self.name + return c.instance == self.name end, nil, self.screen) do i = i + 1 @@ -51,17 +52,22 @@ function quake:display() if not client and not self.visible then return end if not client then - -- The client does not exist, we spawn it - awful.util.spawn(self.app .. " " .. string.format(self.argname, self.name), - false, self.screen) - return + -- The client does not exist, we spawn it + awful.util.spawn(string.format("%s %s %s", self.app, + string.format(self.argname, self.name), self.extra), + false, self.screen) + self.notexist = true + return end -- Resize awful.client.floating.set(client, true) - client.border_width = 0 + client.border_width = self.border client.size_hints_honor = false - client:geometry(self.geometry) + if self.notexist then + client:geometry(self.geometry) + self.notexist = false + end -- Not sticky and on top client.ontop = true @@ -69,10 +75,6 @@ function quake:display() client.skip_taskbar = true client.sticky = false - -- This is not a normal window, don't apply any specific keyboard stuff - client:buttons({}) - client:keys({}) - -- Toggle display if self.visible then client.hidden = false @@ -95,23 +97,25 @@ end function quake:new(config) local conf = config or {} - conf.app = conf.app or "xterm" -- application to spawn - conf.name = conf.name or "QuakeDD" -- window name - conf.argname = conf.argname or "-name %s" -- how to specify window name - conf.visible = conf.visible or false -- initially not visible - conf.screen = conf.screen or capi.mouse.screen + conf.app = conf.app or "xterm" -- application to spawn + conf.name = conf.name or "QuakeDD" -- window name + conf.argname = conf.argname or "-name %s" -- how to specify window name + conf.extra = conf.extra or "" -- extra arguments + conf.visible = conf.visible or false -- initially not visible + conf.screen = conf.screen or capi.mouse.screen + conf.border = conf.border or 1 -- If width or height <= 1 this is a proportion of the workspace wibox_height = conf.wibox_height or 18 -- statusbar weight - height = conf.height or 0.25 -- height - width = conf.width or 1 -- width - vert = conf.vert or "top" -- top, bottom or center + height = conf.height or 0.25 -- height + width = conf.width or 1 -- width + vert = conf.vert or "top" -- top, bottom or center horiz = conf.horiz or "center" -- left, right or center -- Compute size local geom = capi.screen[conf.screen].workarea - if width <= 1 then width = geom.width * width end - if height <= 1 then height = geom.height * height end + if width <= 1 then width = math.floor(geom.width * width) end + if height <= 1 then height = math.floor(geom.height * height) end local x, y if horiz == "left" then x = geom.x elseif horiz == "right" then x = geom.width + geom.x - width @@ -125,19 +129,19 @@ function quake:new(config) capi.client.connect_signal("manage", function(c) if c.instance == console.name and c.screen == console.screen then console:display() - end + end end) capi.client.connect_signal("unmanage", function(c) if c.instance == console.name and c.screen == console.screen then console.visible = false - end - end) + end + end) -- "Reattach" currently running quake application. This is in case awesome is restarted. local reattach = capi.timer { timeout = 0 } reattach:connect_signal("timeout", function() reattach:stop() - console:display() + console:display() end) reattach:start()