From: copycat-killer <dada@archlinux.info>
Date: Mon, 23 Jan 2017 19:58:19 +0000 (+0100)
Subject: taskwarrior: asynchronous; #213 enhanced
X-Git-Url: https://git.madduck.net/etc/awesome.git/commitdiff_plain/099e23aac2372f11a6f2b9a8c0d62bdfd8ee85b6?ds=sidebyside;hp=156515eb28c002300aaf06651f7c412ca2bc07f1

taskwarrior: asynchronous; #213 enhanced
---

diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md
index e98373d..e024e8b 100644
--- a/ISSUE_TEMPLATE.md
+++ b/ISSUE_TEMPLATE.md
@@ -1,4 +1,4 @@
-**Please read the wiki and browse the Issues section first.**
+**Please read the [wiki](https://github.com/copycat-killer/lain/wiki) and search the [Issues section](https://github.com/copycat-killer/lain/issues) first.**
 
 If you can't find a solution there, then go ahead and provide:
 
diff --git a/icons/redshift/redshift_off.png b/icons/redshift/redshift_off.png
deleted file mode 100644
index a92200f..0000000
Binary files a/icons/redshift/redshift_off.png and /dev/null differ
diff --git a/icons/redshift/redshift_on.png b/icons/redshift/redshift_on.png
deleted file mode 100644
index 205e0a7..0000000
Binary files a/icons/redshift/redshift_on.png and /dev/null differ
diff --git a/icons/taskwarrior/task.png b/icons/taskwarrior.png
similarity index 100%
rename from icons/taskwarrior/task.png
rename to icons/taskwarrior.png
diff --git a/icons/taskwarrior/tasksmall.png b/icons/taskwarrior/tasksmall.png
deleted file mode 100755
index 2de6946..0000000
Binary files a/icons/taskwarrior/tasksmall.png and /dev/null differ
diff --git a/widgets/calendar.lua b/widgets/calendar.lua
index a00caba..e4216e4 100644
--- a/widgets/calendar.lua
+++ b/widgets/calendar.lua
@@ -15,7 +15,6 @@ local os           = { date   = os.date }
 local string       = { format = string.format,
                        gsub   = string.gsub }
 local tonumber     = tonumber
-local setmetatable = setmetatable
 
 -- Calendar notification
 -- lain.widgets.calendar
@@ -94,16 +93,18 @@ function calendar.attach(widget, args)
         calendar.notification_preset.bg   = "#000000"
     end
 
-    widget:connect_signal("mouse::enter", function () calendar.show(0, 0, calendar.scr_pos) end)
-    widget:connect_signal("mouse::leave", function () calendar.hide() end)
-    widget:buttons(awful.util.table.join(awful.button({ }, 1, function ()
-                                             calendar.show(0, -1, calendar.scr_pos) end),
-                                         awful.button({ }, 3, function ()
-                                             calendar.show(0, 1, calendar.scr_pos) end),
-                                         awful.button({ }, 4, function ()
-                                             calendar.show(0, -1, calendar.scr_pos) end),
-                                         awful.button({ }, 5, function ()
-                                             calendar.show(0, 1, calendar.scr_pos) end)))
+    if widget then
+        widget:connect_signal("mouse::enter", function () calendar.show() end)
+        widget:connect_signal("mouse::leave", function () calendar.hide() end)
+        widget:buttons(awful.util.table.join(awful.button({ }, 1, function ()
+                                                 calendar.show(0, -1, calendar.scr_pos) end),
+                                             awful.button({ }, 3, function ()
+                                                 calendar.show(0, 1, calendar.scr_pos) end),
+                                             awful.button({ }, 4, function ()
+                                                 calendar.show(0, -1, calendar.scr_pos) end),
+                                             awful.button({ }, 5, function ()
+                                                 calendar.show(0, 1, calendar.scr_pos) end)))
+    end
 end
 
-return setmetatable(calendar, { __call = function(_, ...) return create(...) end })
+return calendar
diff --git a/widgets/contrib/redshift.lua b/widgets/contrib/redshift.lua
index 8a768fb..fdda61f 100644
--- a/widgets/contrib/redshift.lua
+++ b/widgets/contrib/redshift.lua
@@ -46,7 +46,9 @@ end
 function redshift:attach(widget, fun)
     redshift.update_fun = fun or function() end
     if not redshift.pid then redshift:start() end
-    widget:buttons(awful.util.table.join(awful.button({}, 1, function () redshift:toggle() end)))
+    if widget then
+        widget:buttons(awful.util.table.join(awful.button({}, 1, function () redshift:toggle() end)))
+    end
 end
 
 return redshift
diff --git a/widgets/contrib/task.lua b/widgets/contrib/task.lua
index 6c8c9cc..2f57317 100644
--- a/widgets/contrib/task.lua
+++ b/widgets/contrib/task.lua
@@ -6,144 +6,77 @@
                                                   
 --]]
 
-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.contrib.task
 local task = {}
 
-local task_notification = nil
-
-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
+    if not task.notification then return end
+    naughty.destroy(task.notification)
+    task.notification = nil
 end
 
-function task.show(scr_pos)
+function task.show(scr)
     task.hide()
 
-    local f, c_text, scrp
-
     if task.followtag then
-        scrp = awful.screen.focused()
-    else
-        scrp = scr_pos or task.scr_pos
+        task.notification_preset.screen = awful.screen.focused()
+    elseif scr then
+        task.notification_preset.screen = scr
     end
 
-    f = io.popen('task ' .. task.cmdline)
-    c_text = "<span font='"
-             .. task.font .. " "
-             .. task.font_size .. "'>"
-             .. awful.util.escape(f:read("*all"):gsub("\n*$", ""))
-             .. "</span>"
-    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,
-                                         screen = scrp
-                                     })
+    helpers.async(string.format("%s -c '%s'", awful.util.shell, task.cmd),
+    function(f)
+        task.notification = naughty.notify({
+            preset = task_notification_preset,
+            title  = task.cmd,
+            text   = markup.font(task.notification_preset.font,
+                     awful.util.escape(f:gsub("\n*$", "")))
+        })
+    end)
 end
 
-function task.prompt_add()
-  awful.prompt.run({ prompt = "Add task: " },
-      mypromptbox[awful.screen.focused()].widget,
-      function (...)
-          local f = io.popen("task add " .. ...)
-          c_text = "\n<span font='"
-                   .. task.font .. " "
-                   .. task.font_size .. "'>"
-                   .. awful.util.escape(f:read("*all"))
-                   .. "</span>"
-          f:close()
-
-          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")
-end
-
-function task.prompt_search()
-  awful.prompt.run({ prompt = "Search task: " },
-      mypromptbox[awful.screen.focused()].widget,
-      function (...)
-          local f = io.popen("task " .. ...)
-          c_text = f:read("*all"):gsub(" \n*$", "")
-          f:close()
-
-          if string.len(c_text) == 0
-          then
-              c_text = "No results found."
-          else
-              c_text = "<span font='"
-                       .. task.font .. " "
-                       .. task.font_size .. "'>"
-                       .. awful.util.escape(c_text)
-                       .. "</span>"
-          end
-
-          naughty.notify({
-              title    = "[task next " .. ... .. "]",
-              text     = c_text,
-              icon     = task.notify_icon,
-              position = task.position,
-              fg       = task.fg,
-              bg       = task.bg,
-              timeout  = task.timeout,
-              screen   = awful.screen.focused()
-          })
-      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(string.format("%s -c '%s'", awful.util.shell, 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        = 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"
+    local args               = args or {}
+    task.show_cmd            = args.cmd or "task"
+    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(task.scr_pos) 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
diff --git a/widgets/fs.lua b/widgets/fs.lua
index 391c260..3a97d4c 100644
--- a/widgets/fs.lua
+++ b/widgets/fs.lua
@@ -37,7 +37,7 @@ function fs.show(seconds, scr)
     if fs.followtag then
         fs.notification_preset.screen = focused()
     elseif scr then
-        fs.notification_preset.screen = scr
+        fs.notification_preset.screen = scr or 1
     end
 
     local cmd = (fs.options and string.format("dfs %s", fs.options)) or "dfs"
@@ -74,7 +74,6 @@ local function worker(args)
 
     helpers.set_map(partition, false)
 
-
     function update()
         fs_info, fs_now  = {}, {}
         helpers.async(string.format("%s -c 'LC_ALL=C df -k --output=target,size,used,avail,pcent'", shell), function(f)
@@ -107,11 +106,9 @@ local function worker(args)
 
             if notify == "on" and tonumber(fs_now.used) >= 99 and not helpers.get_map(partition) then
                 naughty.notify({
-                    title   = "Warning",
-                    text    = partition .. " is empty!",
-                    timeout = 8,
-                    fg      = "#000000",
-                    bg      = "#FFFFFF"
+                    preset = naughty.config.presets.critical,
+                    title  = "Warning",
+                    text   = partition .. " is empty",
                 })
                 helpers.set_map(partition, true)
             else
diff --git a/wiki b/wiki
index 66836bb..2f7c2a9 160000
--- a/wiki
+++ b/wiki
@@ -1 +1 @@
-Subproject commit 66836bbf1ffc0dd3bd3aef4799fff78ded9df4ec
+Subproject commit 2f7c2a96a29a94829acf0b9e7fb614a7432a5092