]>
git.madduck.net Git - etc/awesome.git/blobdiff - util/quake.lua
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
--[[
Licensed under GNU General Public License v2
- * (c) 2016, Luke Bonham
* (c) 2015, unknown
--]]
local awful = require("awful")
* (c) 2015, unknown
--]]
local awful = require("awful")
-local capi = { client = client }
-
-local math = { floor = math.floor }
-local string = { format = string.format }
-
+local client = client
+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
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.geometry[self.screen] or 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
client:raise()
self.last_tag = self.screen.selected_tag
client:tags({self.screen.selected_tag})
client:raise()
self.last_tag = self.screen.selected_tag
client:tags({self.screen.selected_tag})
- capi.c lient.focus = client
else
client.hidden = true
local ctags = client:tags()
else
client.hidden = true
local ctags = client:tags()
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)
local dropdown = setmetatable(conf, { __index = quake })
local dropdown = setmetatable(conf, { __index = quake })
- capi.c lient.connect_signal("manage", function(c)
+ client.connect_signal("manage", function(c)
if c.instance == dropdown.name and c.screen == dropdown.screen then
dropdown:display()
end
end)
if c.instance == dropdown.name and c.screen == dropdown.screen then
dropdown:display()
end
end)
- capi.c lient.connect_signal("unmanage", function(c)
+ client.connect_signal("unmanage", function(c)
if c.instance == dropdown.name and c.screen == dropdown.screen then
dropdown.visible = false
end
if c.instance == dropdown.name and c.screen == dropdown.screen then
dropdown.visible = false
end
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()