From: Luke Bonham Date: Wed, 25 Sep 2013 10:32:19 +0000 (-0700) Subject: Merge pull request #3 from janx/master X-Git-Url: https://git.madduck.net/etc/awesome.git/commitdiff_plain/ea784d4c844449e8184e3f2e62cd829d3a543734?hp=2c6a5794b20e757292825450557750df595d1868 Merge pull request #3 from janx/master Task widget --- diff --git a/icons/taskwarrior.png b/icons/taskwarrior.png new file mode 100644 index 0000000..171af60 Binary files /dev/null and b/icons/taskwarrior.png differ diff --git a/widgets/task.lua b/widgets/task.lua new file mode 100644 index 0000000..f2b49f4 --- /dev/null +++ b/widgets/task.lua @@ -0,0 +1,124 @@ + +--[[ + + Licensed under GNU General Public License v2 + * (c) 2013, Jan Xie + +--]] + +local icons_dir = require("lain.helpers").icons_dir + +local awful = require("awful") +local beautiful = require("beautiful") +local naughty = require("naughty") + +local io = io +local tonumber = tonumber + +local setmetatable = setmetatable + +-- task notification +-- lain.widgets.task +local task = {} +local task_notification = nil + +function task:hide() + if task_notification ~= nil then + naughty.destroy(task_notification) + task_notification = nil + end +end + +function task:show() + task:hide() + + local f, c_text + + f = io.popen('task') + c_text = "Tasks next\n" + .. "" + .. f:read("*all") .. "\n" + .. "" + f:close() + + task_notification = naughty.notify({ text = c_text, + icon = task.notify_icon, + position = task.position, + fg = task.fg, + bg = task.bg, + timeout = task.timeout }) +end + +function task:add(...) + local f = io.popen("task add " .. ...) + c_text = "" + .. f:read("*all") .. "\n" + .. "" + + naughty.notify({ text = c_text, + icon = task.notify_icon, + position = task.position, + fg = task.fg, + bg = task.bg, + timeout = task.timeout}) +end + +function task:prompt_add() + awful.prompt.run( { prompt = "Add task: " }, + mypromptbox[mouse.screen].widget, + function (...) + task:add(...) + end, + nil, + awful.util.getdir("cache") .. "/history_task_add") +end + +function task:execute(...) + local f = io.popen("task " .. ...) + c_text = "" + .. f:read("*all") .. "\n" + .. "" + + naughty.notify({ text = c_text, + icon = task.notify_icon, + position = task.position, + fg = task.fg, + bg = task.bg, + timeout = task.timeout}) +end + +function task:prompt() + awful.prompt.run( { prompt = "Task: " }, + mypromptbox[mouse.screen].widget, + function (...) + task:execute(...) + end, + nil, + awful.util.getdir("cache") .. "/history_task") +end + +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.notify_icon = icons_dir .. "taskwarrior.png" + + widget:connect_signal("mouse::enter", function () task:show() end) + widget:connect_signal("mouse::leave", function () task:hide() end) + widget:buttons(awful.util.table.join( awful.button({ }, 1, function () + task:show(0, -1) end), + awful.button({ }, 3, function () + task:show(0, 1) end) )) +end + +return setmetatable(task, { __call = function(_, ...) return create(...) end })