You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.7 KiB
92 lines
2.7 KiB
--[[ |
|
|
|
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
|
|
|