Merge branch 'master' into develop

merge Pull request from github to develop
branch, because the codes are based on
github version of awesome WM.
This commit is contained in:
Quan Guo 2015-09-22 11:08:39 +02:00
commit 77318111e3
1 changed files with 84 additions and 66 deletions

View File

@ -22,6 +22,7 @@ local table = table
local clock = os.clock local clock = os.clock
local tostring = tostring local tostring = tostring
local capi = { local capi = {
awesome = awesome,
tag = tag, tag = tag,
client = client, client = client,
keygrabber = keygrabber, keygrabber = keygrabber,
@ -29,14 +30,15 @@ local capi = {
mouse = mouse, mouse = mouse,
screen = screen screen = screen
} }
-- the function is still in develop version
--local delayed_call = require("gears.timer").delayed_call
local revelation ={}
local clientData = {} -- table that holds the positions and sizes of floating clients local clientData = {} -- table that holds the positions and sizes of floating clients
charorder = "jkluiopyhnmfdsatgvcewqzx1234567890" local charorder = "jkluiopyhnmfdsatgvcewqzx1234567890"
hintbox = {} -- Table of letter wiboxes with characters as the keys local hintbox = {} -- Table of letter wiboxes with characters as the keys
revelation = { local revelation = {
-- Name of expose tag. -- Name of expose tag.
tag_name = "Revelation", tag_name = "Revelation",
@ -61,7 +63,10 @@ revelation = {
}, },
tags_status = {}, tags_status = {},
is_excluded = false, is_excluded = false,
curr_tag_only = false curr_tag_only = false,
font = "monospace 20",
fg = beautiful.fg_normal,
hintsize = beautiful.xresources.apply_dpi(50)
} }
@ -71,15 +76,12 @@ revelation = {
local function selectfn(restore) local function selectfn(restore)
return function(c) return function(c)
restore() restore()
-- Pop to client tag
awful.tag.viewonly(c:tags()[1], c.screen)
-- Focus and raise -- Focus and raise
if c.minimized then if c.minimized then
c.minimized = false c.minimized = false
end end
capi.client.focus = c awful.client.jumpto(c)
awful.screen.focus(c.screen)
c:raise()
end end
end end
@ -89,8 +91,8 @@ end
-- @param t The tag to give matching clients. -- @param t The tag to give matching clients.
local function match_clients(rule, clients, t, is_excluded) local function match_clients(rule, clients, t, is_excluded)
local mfc = rule.any and revelation.match.any or revelation.match.exact local mfc = rule.any and revelation.match.any or revelation.match.exact
local mf = is_excluded and function(c,rule) return not mfc(c,rule) end or mfc local mf = is_excluded and function(c,_rule) return not mfc(c,_rule) end or mfc
local k,v, flt local flt
for _, c in pairs(clients) do for _, c in pairs(clients) do
if mf(c, rule) then if mf(c, rule) then
-- Store geometry before setting their tags -- Store geometry before setting their tags
@ -123,7 +125,7 @@ end
function revelation.expose(args) function revelation.expose(args)
local args = args or {} args = args or {}
local rule = args.rule or {} local rule = args.rule or {}
local is_excluded = args.is_excluded or false local is_excluded = args.is_excluded or false
local curr_tag_only = args.curr_tag_only or false local curr_tag_only = args.curr_tag_only or false
@ -136,9 +138,6 @@ function revelation.expose(args)
for scr=1,capi.screen.count() do for scr=1,capi.screen.count() do
all_tags = awful.tag.gettags(scr)
t[scr] = awful.tag.new({revelation.tag_name}, t[scr] = awful.tag.new({revelation.tag_name},
scr, scr,
awful.layout.suit.fair)[1] awful.layout.suit.fair)[1]
@ -155,35 +154,52 @@ function revelation.expose(args)
awful.tag.viewonly(t[scr], t.screen) awful.tag.viewonly(t[scr], t.screen)
end end
capi.awesome.emit_signal("refresh")
revelation.expose_callback(t, zt)
end
---- descrepted
---- this timer is used to want the the geometry of clients are recalcuated.
---- if timeout = 0.0, it consumes cpu, timeout = 0.001 is good enough.
----
--local block_timer = timer({ timeout = 0.001 })
-- this timer is used to want the the geometry of clients are recalcuated. --local hintindex = {} -- Table of visible clients with the hint letter as the keys
-- if timeout = 0.0, it consumes cpu, timeout = 0.001 is good enough. --local clientlist = awful.client.visible()
--
local block_timer = timer({ timeout = 0.001 })
--block_timer:connect_signal("timeout", function ()
--for i,thisclient in pairs(clientlist) do
---- Move wiboxes to center of visible windows and populate hintindex
--local char = charorder:sub(i,i)
--hintindex[char] = thisclient
--hintbox[char].visible = true
--local geom = thisclient.geometry(thisclient)
--hintbox[char].x = geom.x + geom.width/2 - hintsize/2
--hintbox[char].y = geom.y + geom.height/2 - hintsize/2
--hintbox[char].screen = thisclient.screen
--end
--end)
--block_timer:start()
function revelation.expose_callback(t, zt)
local hintindex = {} -- Table of visible clients with the hint letter as the keys local hintindex = {} -- Table of visible clients with the hint letter as the keys
local clientlist = awful.client.visible() local clientlist = awful.client.visible()
block_timer:connect_signal("timeout", function ()
for i,thisclient in pairs(clientlist) do for i,thisclient in pairs(clientlist) do
-- Move wiboxes to center of visible windows and populate hintindex -- Move wiboxes to center of visible windows and populate hintindex
local char = charorder:sub(i,i) local char = charorder:sub(i,i)
if char and char ~= '' then
hintindex[char] = thisclient hintindex[char] = thisclient
local geom = thisclient:geometry()
hintbox[char].visible = true hintbox[char].visible = true
local geom = thisclient.geometry(thisclient) hintbox[char].x = math.floor(geom.x + geom.width/2 - revelation.hintsize/2)
hintbox[char].x = geom.x + geom.width/2 - hintsize/2 hintbox[char].y = math.floor(geom.y + geom.height/2 - revelation.hintsize/2)
hintbox[char].y = geom.y + geom.height/2 - hintsize/2
hintbox[char].screen = thisclient.screen hintbox[char].screen = thisclient.screen
end end
end) end
block_timer:start()
local function restore() local function restore()
local k,v
for scr=1, capi.screen.count() do for scr=1, capi.screen.count() do
awful.tag.history.restore(scr) awful.tag.history.restore(scr)
t[scr].screen = nil t[scr].screen = nil
@ -230,11 +246,11 @@ function revelation.expose(args)
local zoomed = false local zoomed = false
local zoomedClient = nil local zoomedClient = nil
local keyPressed = false
capi.keygrabber.run(function (mod, key, event)
local c = nil
local keyPressed = false local keyPressed = false
capi.keygrabber.run(function (mod, key, event)
local c
keyPressed = false
if event == "release" then return true end if event == "release" then return true end
@ -333,11 +349,9 @@ end
-- Create the wiboxes, but don't show them -- Create the wiboxes, but don't show them
-- --
function revelation.init(args) function revelation.init(args)
hintsize = 60
local fontcolor = beautiful.fg_normal
local letterbox = {} local letterbox = {}
local args = args or {} args = args or {}
revelation.tag_name = args.tag_name or revelation.tag_name revelation.tag_name = args.tag_name or revelation.tag_name
if args.match then if args.match then
@ -350,11 +364,15 @@ function revelation.init(args)
local char = charorder:sub(i,i) local char = charorder:sub(i,i)
hintbox[char] = wibox({fg=beautiful.fg_normal, bg=beautiful.bg_focus, border_color=beautiful.border_focus, border_width=beautiful.border_width}) hintbox[char] = wibox({fg=beautiful.fg_normal, bg=beautiful.bg_focus, border_color=beautiful.border_focus, border_width=beautiful.border_width})
hintbox[char].ontop = true hintbox[char].ontop = true
hintbox[char].width = hintsize hintbox[char].width = revelation.hintsize
hintbox[char].height = hintsize hintbox[char].height = revelation.hintsize
letterbox[char] = wibox.widget.textbox() letterbox[char] = wibox.widget.textbox()
letterbox[char]:set_markup("<span color=\"" .. beautiful.fg_normal.."\"" .. ">" .. char.upper(char) .. "</span>") letterbox[char]:set_markup(
letterbox[char]:set_font("dejavu sans mono 40") "<span color=\"" .. revelation.fg .. "\"" .. ">" ..
char.upper(char) ..
"</span>"
)
letterbox[char]:set_font(revelation.font)
letterbox[char]:set_align("center") letterbox[char]:set_align("center")
hintbox[char]:set_widget(letterbox[char]) hintbox[char]:set_widget(letterbox[char])
end end