--[[ Licensed under GNU General Public License v2 * (c) 2013, Jan Xie --]] local helpers = require('lain.helpers') local markup = require('lain.util').markup local awful = require('awful') local naughty = require('naughty') local mouse = mouse -- Taskwarrior notification -- lain.widget.contrib.task local task = {} function task.hide() if not task.notification then return end naughty.destroy(task.notification) task.notification = nil end function task.show(scr) task.notification_preset.screen = task.followtag and awful.screen.focused() or scr or 1 helpers.async({ awful.util.shell, '-c', task.show_cmd }, function(f) local widget_focused = true if mouse.current_widgets then widget_focused = false for _, v in ipairs(mouse.current_widgets) do if task.widget == v then widget_focused = true break end end end if widget_focused then task.hide() task.notification = naughty.notify({ preset = task.notification_preset, title = 'task next', text = markup.font(task.notification_preset.font, awful.util.escape(f:gsub('\n*$', ''))), }) end end) end 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) 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 task.widget = widget if not task.notification_preset then task.notification_preset = { font = 'Monospace 10', icon = helpers.icons_dir .. '/taskwarrior.png', } 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 task