X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/66dde90206fe181cbe49d236925a8d4e6a86ec54..3a2e5e0a8a7557f3c5eb73171ac80da57ef582ac:/widgets/contrib/task.lua diff --git a/widgets/contrib/task.lua b/widgets/contrib/task.lua index 88baa71..1b8f119 100644 --- a/widgets/contrib/task.lua +++ b/widgets/contrib/task.lua @@ -2,7 +2,6 @@ --[[ Licensed under GNU General Public License v2 - * (c) 2013, Luke Bonham * (c) 2013, Jan Xie --]] @@ -13,6 +12,7 @@ local awful = require("awful") local beautiful = require("beautiful") local naughty = require("naughty") +local mouse = mouse local io = io local string = { len = string.len } local tonumber = tonumber @@ -20,29 +20,40 @@ local tonumber = tonumber local setmetatable = setmetatable -- Taskwarrior notification --- lain.widgets.task +-- lain.widgets.contrib.task local task = {} local task_notification = nil -function task:hide() +function findLast(haystack, needle) + local i=haystack:match(".*"..needle.."()") + if i==nil then return nil else return i-1 end +end + +function task.hide() if task_notification ~= nil then naughty.destroy(task_notification) task_notification = nil end end -function task:show() - task:hide() +function task.show(scr_pos) + task.hide() - local f, c_text + local f, c_text, scrp - f = io.popen('task') - c_text = "" - .. f:read("*all"):gsub("\n*$", "") - .. "" + .. awful.util.escape(f:read("*all"):gsub("\n*$", "")) + .. "" f:close() task_notification = naughty.notify({ title = "[task next]", @@ -51,81 +62,89 @@ function task:show() position = task.position, fg = task.fg, bg = task.bg, - timeout = task.timeout }) + timeout = task.timeout, + screen = scrp + }) end -function task:prompt_add() +function task.prompt_add() awful.prompt.run({ prompt = "Add task: " }, - mypromptbox[mouse.screen].widget, + mypromptbox[awful.screen.focused()].widget, function (...) local f = io.popen("task add " .. ...) - c_text = "\n" - .. f:read("*all") - .. "" + .. awful.util.escape(f:read("*all")) + .. "" + f:close() naughty.notify({ - text = c_text, - icon = task.notify_icon, + text = c_text, + icon = task.notify_icon, position = task.position, - fg = task.fg, - bg = task.bg, - timeout = task.timeout + fg = task.fg, + bg = task.bg, + timeout = task.timeout, }) end, nil, awful.util.getdir("cache") .. "/history_task_add") end -function task:prompt_search() +function task.prompt_search() awful.prompt.run({ prompt = "Search task: " }, - mypromptbox[mouse.screen].widget, + mypromptbox[awful.screen.focused()].widget, function (...) local f = io.popen("task " .. ...) - c_text = f:read("*all") + c_text = f:read("*all"):gsub(" \n*$", "") f:close() if string.len(c_text) == 0 then c_text = "No results found." else - c_text = "" - .. c_text .. "\n" - .. "" + .. awful.util.escape(c_text) + .. "" end naughty.notify({ - text = c_text, - icon = task.notify_icon, + title = "[task next " .. ... .. "]", + text = c_text, + icon = task.notify_icon, position = task.position, - fg = task.fg, - bg = task.bg, - timeout = task.timeout + fg = task.fg, + bg = task.bg, + timeout = task.timeout, + screen = awful.screen.focused() }) end, nil, awful.util.getdir("cache") .. "/history_task") end -function task:attach(widget, args) - local args = args or {} +function task.attach(widget, args) + local args = args or {} - task.font_size = tonumber(args.font_size) or 12 - task.font = beautiful.font:sub(beautiful.font:find(""), - beautiful.font:find(" ")) - task.fg = args.fg or beautiful.fg_normal or "#FFFFFF" - task.bg = args.bg or beautiful.bg_normal or "#FFFFFF" - task.position = args.position or "top_right" - task.timeout = args.timeout or 7 + task.font_size = tonumber(args.font_size) or 12 + task.font = args.font or beautiful.font:sub(beautiful.font:find(""), + findLast(beautiful.font, " ")) + task.fg = args.fg or beautiful.fg_normal or "#FFFFFF" + task.bg = args.bg or beautiful.bg_normal or "#FFFFFF" + task.position = args.position or "top_right" + task.timeout = args.timeout or 7 + task.scr_pos = args.scr_pos or 1 + task.followtag = args.followtag or false + task.cmdline = args.cmdline or "next" task.notify_icon = icons_dir .. "/taskwarrior/task.png" task.notify_icon_small = icons_dir .. "/taskwarrior/tasksmall.png" - widget:connect_signal("mouse::enter", function () task:show() end) - widget:connect_signal("mouse::leave", function () task:hide() end) + widget:connect_signal("mouse::enter", function () task.show(task.scr_pos) end) + widget:connect_signal("mouse::leave", function () task.hide() end) end return setmetatable(task, { __call = function(_, ...) return create(...) end })