X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/66dde90206fe181cbe49d236925a8d4e6a86ec54..e64c1443d028749ba469def533efb075abd3d06b:/widgets/contrib/task.lua?ds=inline

diff --git a/widgets/contrib/task.lua b/widgets/contrib/task.lua
index 88baa71..4325437 100644
--- a/widgets/contrib/task.lua
+++ b/widgets/contrib/task.lua
@@ -2,130 +2,79 @@
 --[[
                                                   
      Licensed under GNU General Public License v2 
-      * (c) 2013, Luke Bonham                     
       * (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 string       = { len = string.len }
-local tonumber     = tonumber
-
-local setmetatable = setmetatable
+local helpers = require("lain.helpers")
+local awful   = require("awful")
+local naughty = require("naughty")
+local string  = { format = string.format, gsub = string.gsub }
 
 -- Taskwarrior notification
--- lain.widgets.task
+-- lain.widgets.contrib.task
 local task = {}
 
-local task_notification = nil
-
-function task:hide()
-    if task_notification ~= nil then
-        naughty.destroy(task_notification)
-        task_notification = nil
-    end
+function task.hide()
+    if not task.notification then return end
+    naughty.destroy(task.notification)
+    task.notification = nil
 end
 
-function task:show()
-    task:hide()
-
-    local f, c_text
-
-    f = io.popen('task')
-    c_text = "<tt><span font='"
-             .. task.font .. " "
-             .. task.font_size .. "'>"
-             .. f:read("*all"):gsub("\n*$", "")
-             .. "</span></tt>"
-    f:close()
-
-    task_notification = naughty.notify({ title = "[task next]",
-                                         text = c_text,
-                                         icon = task.notify_icon,
-                                         position = task.position,
-                                         fg = task.fg,
-                                         bg = task.bg,
-                                         timeout = task.timeout })
-end
+function task.show(scr)
+    task.hide()
 
-function task:prompt_add()
-  awful.prompt.run({ prompt = "Add task: " },
-      mypromptbox[mouse.screen].widget,
-      function (...)
-          local f = io.popen("task add " .. ...)
-          c_text = "\n<tt><span font='" 
-                   .. task.font .. " "
-                   .. task.font_size .. "'>"
-                   .. f:read("*all")
-                   .. "</span></tt>"
+    if task.followtag then
+        task.notification_preset.screen = awful.screen.focused()
+    elseif scr then
+        task.notification_preset.screen = scr
+    end
 
-          naughty.notify({
-              text = c_text,
-              icon = task.notify_icon,
-              position = task.position,
-              fg = task.fg,
-              bg = task.bg,
-              timeout = task.timeout
-          })
-      end,
-      nil,
-      awful.util.getdir("cache") .. "/history_task_add")
+    helpers.async(task.show_cmd, function(f)
+        task.notification = naughty.notify({
+            preset = task_notification_preset,
+            title  = task.show_cmd,
+            text   = markup.font(task.notification_preset.font,
+                     awful.util.escape(f:gsub("\n*$", "")))
+        })
+    end)
 end
 
-function task:prompt_search()
-  awful.prompt.run({ prompt = "Search task: " },
-      mypromptbox[mouse.screen].widget,
-      function (...)
-          local f = io.popen("task " .. ...)
-          c_text = f:read("*all")
-          f:close()
-
-          if string.len(c_text) == 0
-          then
-              c_text = "No results found."
-          else
-              c_text = "<tt><span font='"
-                       .. task.font .. " "
-                       .. task.font_size .. "'>"
-                       .. c_text .. "\n"
-                       .. "</span></tt>"
-          end
-
-          naughty.notify({
-              text = c_text,
-              icon = task.notify_icon,
-              position = task.position,
-              fg = task.fg,
-              bg = task.bg,
-              timeout = task.timeout
-          })
-      end,
-      nil,
-      awful.util.getdir("cache") .. "/history_task")
+function task.prompt()
+    awful.prompt.run {
+        prompt       = task.prompt_text,
+        textbox      = awful.screen.focused().mypromptbox.widget,
+        exe_callback = function(t)
+            helpers.async(t, function(f)
+                naughty.notify {
+                    preset = task.notification_preset,
+                    title    = t,
+                    text     = markup.font(task.notification_preset.font,
+                               awful.util.escape(f:gsub("\n*$", "")))
+                }
+            end)
+        end,
+        history_path = 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/task.png"
-    task.notify_icon_small = icons_dir .. "/taskwarrior/tasksmall.png"
+function task.attach(widget, args)
+    local args               = args or {}
+    task.show_cmd            = args.show_cmd or "task next"
+    task.prompt_text         = args.prompt_text or "Enter task command: "
+    task.followtag           = args.followtag or false
+    task.notification_preset = args.notification_preset
+
+    if not task.notification_preset then
+        task.notification_preset      = naughty.config.defaults
+        task.notification_preset.font = "Monospace 10"
+        task.notification_preset.icon = helpers.icons_dir .. "/taskwarrior.png"
+    end
 
-    widget:connect_signal("mouse::enter", function () task:show() end)
-    widget:connect_signal("mouse::leave", function () task:hide() end)
+    if widget then
+        widget:connect_signal("mouse::enter", function () task.show() end)
+        widget:connect_signal("mouse::leave", function () task.hide() end)
+    end
 end
 
-return setmetatable(task, { __call = function(_, ...) return create(...) end })
+return task