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:
-
- Licensed under GNU General Public License v2
- * (c) 2016, Luke Bonham
- * (c) 2015, unknown
-
+
+ Licensed under GNU General Public License v2
+ * (c) 2016, Luca CPZ
+ * (c) 2015, unknown
+
--]]
local awful = require("awful")
local capi = { client = client }
--]]
local awful = require("awful")
local capi = { client = client }
-
-local math = { floor = math.floor }
-local string = { format = string.format }
-
+local math = math
+local string = string
local pairs = pairs
local screen = screen
local pairs = pairs
local screen = screen
local setmetatable = setmetatable
-- Quake-like Dropdown application spawn
local setmetatable = setmetatable
-- Quake-like Dropdown application spawn
function quake:display()
if self.followtag then self.screen = awful.screen.focused() end
function quake:display()
if self.followtag then self.screen = awful.screen.focused() end
- local toscan = self.screen
- if self.onlyone then toscan = nil end
-- First, we locate the client
local client = nil
-- First, we locate the client
local client = nil
for c in awful.client.iterate(function (c)
-- c.name may be changed!
return c.instance == self.name
for c in awful.client.iterate(function (c)
-- c.name may be changed!
return c.instance == self.name
do
i = i + 1
if i == 1 then
do
i = i + 1
if i == 1 then
client.floating = true
client.border_width = self.border
client.size_hints_honor = false
client.floating = true
client.border_width = self.border
client.size_hints_honor = false
- client:geometry(self:compute_size())
+ client:geometry(self.geometry[self.screen.index] or self:compute_size())
-- Set not sticky and on top
client.sticky = false
-- Set not sticky and on top
client.sticky = false
function quake:compute_size()
-- skip if we already have a geometry for this screen
function quake:compute_size()
-- skip if we already have a geometry for this screen
- if not self.geometry[self.screen] then
+ if not self.geometry[self.screen.index] then
local geom
if not self.overlap then
local geom
if not self.overlap then
- geom = screen[self.screen].workarea
+ geom = screen[self.screen.index].workarea
- geom = screen[self.screen].geometry
+ geom = screen[self.screen.index].geometry
end
local width, height = self.width, self.height
if width <= 1 then width = math.floor(geom.width * width) - 2 * self.border end
end
local width, height = self.width, self.height
if width <= 1 then width = math.floor(geom.width * width) - 2 * self.border end
if self.vert == "top" then y = geom.y
elseif self.vert == "bottom" then y = geom.height + geom.y - height
else y = geom.y + (geom.height - height)/2 end
if self.vert == "top" then y = geom.y
elseif self.vert == "bottom" then y = geom.height + geom.y - height
else y = geom.y + (geom.height - height)/2 end
- self.geometry[self.screen] = { x = x, y = y, width = width, height = height }
+ self.geometry[self.screen.index] = { x = x, y = y, width = width, height = height }
- return self.geometry[self.screen]
+ return self.geometry[self.screen.index]
end
function quake:new(config)
end
function quake:new(config)
conf.border = conf.border or 1 -- client border width
conf.visible = conf.visible or false -- initially not visible
conf.followtag = conf.followtag or false -- spawn on currently focused screen
conf.border = conf.border or 1 -- client border width
conf.visible = conf.visible or false -- initially not visible
conf.followtag = conf.followtag or false -- spawn on currently focused screen
- conf.onlyone = conf.onlyone or false -- one instance for all screens
conf.overlap = conf.overlap or false -- overlap wibox
conf.screen = conf.screen or awful.screen.focused()
conf.settings = conf.settings
conf.overlap = conf.overlap or false -- overlap wibox
conf.screen = conf.screen or awful.screen.focused()
conf.settings = conf.settings
if self.followtag then self.screen = awful.screen.focused() end
local current_tag = self.screen.selected_tag
if current_tag and self.last_tag ~= current_tag and self.visible then
if self.followtag then self.screen = awful.screen.focused() end
local current_tag = self.screen.selected_tag
if current_tag and self.last_tag ~= current_tag and self.visible then
- self:display():move_to_tag(current_tag)
+ local c=self:display()
+ if c then
+ c:move_to_tag(current_tag)
+ end
else
self.visible = not self.visible
self:display()
else
self.visible = not self.visible
self:display()