X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/b0bcf77ccc17dc18b6294b63de12ce3e70b53345..6f988d8eb76326d5f93ed110b4f42c6e8946ddd8:/widgets/contrib/task.lua?ds=sidebyside

diff --git a/widgets/contrib/task.lua b/widgets/contrib/task.lua
index 2e30cdc..6c8c9cc 100644
--- a/widgets/contrib/task.lua
+++ b/widgets/contrib/task.lua
@@ -24,23 +24,34 @@ 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
+
+    if task.followtag then
+        scrp = awful.screen.focused()
+    else
+        scrp = scr_pos or task.scr_pos
+    end
 
-    f = io.popen('task')
+    f = io.popen('task ' .. task.cmdline)
     c_text = "<span font='"
              .. task.font .. " "
              .. task.font_size .. "'>"
-             .. f:read("*all"):gsub("\n*$", "")
+             .. awful.util.escape(f:read("*all"):gsub("\n*$", ""))
              .. "</span>"
     f:close()
 
@@ -51,18 +62,19 @@ function task:show()
                                          fg = task.fg,
                                          bg = task.bg,
                                          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<span font='" 
+          c_text = "\n<span font='"
                    .. task.font .. " "
                    .. task.font_size .. "'>"
-                   .. f:read("*all")
+                   .. awful.util.escape(f:read("*all"))
                    .. "</span>"
           f:close()
 
@@ -79,9 +91,9 @@ function task:prompt_add()
       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"):gsub(" \n*$", "")
@@ -94,7 +106,7 @@ function task:prompt_search()
               c_text = "<span font='"
                        .. task.font .. " "
                        .. task.font_size .. "'>"
-                       .. c_text 
+                       .. awful.util.escape(c_text)
                        .. "</span>"
           end
 
@@ -106,28 +118,32 @@ function task:prompt_search()
               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 })