]> git.madduck.net Git - etc/awesome.git/blob - widgets/contrib/task.lua

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Merge branch 'master' of https://github.com/copycat-killer/lain
[etc/awesome.git] / widgets / contrib / task.lua
1
2 --[[
3                                                   
4      Licensed under GNU General Public License v2 
5       * (c) 2013, Luke Bonham                     
6       * (c) 2013, Jan Xie                         
7                                                   
8 --]]
9
10 local icons_dir    = require("lain.helpers").icons_dir
11
12 local awful        = require("awful")
13 local beautiful    = require("beautiful")
14 local naughty      = require("naughty")
15
16 local io           = io
17 local string       = { len = string.len }
18 local tonumber     = tonumber
19
20 local setmetatable = setmetatable
21
22 -- Taskwarrior notification
23 -- lain.widgets.task
24 local task = {}
25
26 local task_notification = nil
27
28 function task:hide()
29     if task_notification ~= nil then
30         naughty.destroy(task_notification)
31         task_notification = nil
32     end
33 end
34
35 function task:show()
36     task:hide()
37
38     local f, c_text
39
40     f = io.popen('task')
41     c_text = "<span font='"
42              .. task.font .. " "
43              .. task.font_size .. "'>"
44              .. f:read("*all"):gsub("\n*$", "")
45              .. "</span>"
46     f:close()
47
48     task_notification = naughty.notify({ title = "[task next]",
49                                          text = c_text,
50                                          icon = task.notify_icon,
51                                          position = task.position,
52                                          fg = task.fg,
53                                          bg = task.bg,
54                                          timeout = task.timeout,
55                                          screen = client.focus and client.focus.screen or 1
56                                      })
57 end
58
59 function task:prompt_add()
60   awful.prompt.run({ prompt = "Add task: " },
61       mypromptbox[mouse.screen].widget,
62       function (...)
63           local f = io.popen("task add " .. ...)
64           c_text = "\n<span font='" 
65                    .. task.font .. " "
66                    .. task.font_size .. "'>"
67                    .. f:read("*all")
68                    .. "</span>"
69           f:close()
70
71           naughty.notify({
72               text     = c_text,
73               icon     = task.notify_icon,
74               position = task.position,
75               fg       = task.fg,
76               bg       = task.bg,
77               timeout  = task.timeout,
78               screen = client.focus and client.focus.screen or 1
79           })
80       end,
81       nil,
82       awful.util.getdir("cache") .. "/history_task_add")
83 end
84
85 function task:prompt_search()
86   awful.prompt.run({ prompt = "Search task: " },
87       mypromptbox[mouse.screen].widget,
88       function (...)
89           local f = io.popen("task " .. ...)
90           c_text = f:read("*all"):gsub(" \n*$", "")
91           f:close()
92
93           if string.len(c_text) == 0
94           then
95               c_text = "No results found."
96           else
97               c_text = "<span font='"
98                        .. task.font .. " "
99                        .. task.font_size .. "'>"
100                        .. c_text 
101                        .. "</span>"
102           end
103
104           naughty.notify({
105               title    = "[task next " .. ... .. "]",
106               text     = c_text,
107               icon     = task.notify_icon,
108               position = task.position,
109               fg       = task.fg,
110               bg       = task.bg,
111               timeout  = task.timeout,
112               screen = client.focus and client.focus.screen or 1
113           })
114       end,
115       nil,
116       awful.util.getdir("cache") .. "/history_task")
117 end
118
119 function task:attach(widget, args)
120     local args     = args or {}
121
122     task.font_size = tonumber(args.font_size) or 12
123     task.font      = beautiful.font:sub(beautiful.font:find(""),
124                      beautiful.font:find(" "))
125     task.fg        = args.fg or beautiful.fg_normal or "#FFFFFF"
126     task.bg        = args.bg or beautiful.bg_normal or "#FFFFFF"
127     task.position  = args.position or "top_right"
128     task.timeout   = args.timeout or 7
129
130     task.notify_icon = icons_dir .. "/taskwarrior/task.png"
131     task.notify_icon_small = icons_dir .. "/taskwarrior/tasksmall.png"
132
133     widget:connect_signal("mouse::enter", function () task:show() end)
134     widget:connect_signal("mouse::leave", function () task:hide() end)
135 end
136
137 return setmetatable(task, { __call = function(_, ...) return create(...) end })