]> git.madduck.net Git - etc/awesome.git/blob - widgets/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:

create task widget template, based on calendar widget
[etc/awesome.git] / widgets / task.lua
1
2 --[[
3                                                   
4      Licensed under GNU General Public License v2 
5       * (c) 2013, Jan Xie
6                                                   
7 --]]
8
9 local icons_dir    = require("lain.helpers").icons_dir
10
11 local awful        = require("awful")
12 local beautiful    = require("beautiful")
13 local naughty      = require("naughty")
14
15 local io           = io
16 local os           = { date = os.date }
17 local tonumber     = tonumber
18
19 local setmetatable = setmetatable
20
21 -- task notification
22 -- lain.widgets.task
23 local task = {}
24 local task_notification = nil
25
26 function task:hide()
27     if task_notification ~= nil then
28         naughty.destroy(task_notification)
29         task_notification = nil
30     end
31 end
32
33 function task:show(t_out, inc_offset)
34     task:hide()
35
36     local offs = inc_offset or 0
37     local tims = t_out or 0
38     local f, c_text
39     local today = tonumber(os.date('%d'))
40     local init_t = '/usr/bin/cal | sed -r -e "s/(^| )( '
41     -- let's take font only, font size is set in task table
42     local font = beautiful.font:sub(beautiful.font:find(""),
43                  beautiful.font:find(" "))
44
45     if offs == 0
46     then -- current month showing, today highlighted
47         if today >= 10
48         then
49            init_t = '/usr/bin/cal | sed -r -e "s/(^| )('
50         end
51
52         task.offset = 0
53         task.notify_icon = task.icons .. today .. ".png"
54
55         -- bg and fg inverted to highlight today
56         f = io.popen( init_t .. today ..
57                       ')($| )/\\1<b><span foreground=\\"'
58                       .. task.bg ..
59                       '\\" background=\\"'
60                       .. task.fg ..
61                       '\\">\\2<\\/span><\\/b>\\3/"' )
62
63     else -- no current month showing, no day to highlight
64        local month = tonumber(os.date('%m'))
65        local year = tonumber(os.date('%Y'))
66
67        task.offset = task.offset + offs
68        month = month + task.offset
69
70        if month > 12 then
71            month = month % 12
72            year = year + 1
73            if month <= 0 then
74                month = 12
75            end
76        elseif month < 1 then
77            month = month + 12
78            year = year - 1
79            if month <= 0 then
80                month = 1
81            end
82        end
83
84        task.notify_icon = nil
85
86        f = io.popen('/usr/bin/cal ' .. month .. ' ' .. year)
87     end
88
89
90     --c_text = "<tt><span font='" .. font .. " "
91              --.. task.font_size .. "'><b>"
92              --.. f:read() .. "</b>\n\n"
93              --.. f:read() .. "\n"
94              --.. f:read("*all"):gsub("\n*$", "")
95              --.. "</span></tt>"
96     c_text = "hello tasks!"
97     f:close()
98
99     task_notification = naughty.notify({ text = c_text,
100                                         icon = task.notify_icon,
101                                         position = task.position,
102                                         fg = task.fg,
103                                         bg = task.bg,
104                                         timeout = tims })
105 end
106
107 function task:attach(widget, args)
108     local args = args or {}
109     task.icons = args.icons or icons_dir .. "cal/white/"
110     task.font_size = tonumber(args.font_size) or 12
111     task.fg = args.fg or beautiful.fg_normal or "#FFFFFF"
112     task.bg = args.bg or beautiful.bg_normal or "#FFFFFF"
113     task.position = args.position or "top_right"
114
115     task.offset = 0
116     task.notify_icon = nil
117
118     widget:connect_signal("mouse::enter", function () task:show() end)
119     widget:connect_signal("mouse::leave", function () task:hide() end)
120     widget:buttons(awful.util.table.join( awful.button({ }, 1, function ()
121                                               task:show(0, -1) end),
122                                           awful.button({ }, 3, function ()
123                                               task:show(0, 1) end) ))
124 end
125
126 return setmetatable(task, { __call = function(_, ...) return create(...) end })