97 lines
2.2 KiB
Lua
97 lines
2.2 KiB
Lua
|
--[[
|
||
|
|
||
|
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
|