taskwarrior: asynchronous; #213 enhanced

This commit is contained in:
copycat-killer 2017-01-23 20:58:19 +01:00
parent 156515eb28
commit 099e23aac2
10 changed files with 74 additions and 141 deletions

View File

@ -1,4 +1,4 @@
**Please read the wiki and browse the Issues section first.**
**Please read the [wiki](https://github.com/copycat-killer/lain/wiki) and search the [Issues section](https://github.com/copycat-killer/lain/issues) first.**
If you can't find a solution there, then go ahead and provide:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 941 B

View File

@ -15,7 +15,6 @@ local os = { date = os.date }
local string = { format = string.format,
gsub = string.gsub }
local tonumber = tonumber
local setmetatable = setmetatable
-- Calendar notification
-- lain.widgets.calendar
@ -94,16 +93,18 @@ function calendar.attach(widget, args)
calendar.notification_preset.bg = "#000000"
end
widget:connect_signal("mouse::enter", function () calendar.show(0, 0, calendar.scr_pos) end)
widget:connect_signal("mouse::leave", function () calendar.hide() end)
widget:buttons(awful.util.table.join(awful.button({ }, 1, function ()
calendar.show(0, -1, calendar.scr_pos) end),
awful.button({ }, 3, function ()
calendar.show(0, 1, calendar.scr_pos) end),
awful.button({ }, 4, function ()
calendar.show(0, -1, calendar.scr_pos) end),
awful.button({ }, 5, function ()
calendar.show(0, 1, calendar.scr_pos) end)))
if widget then
widget:connect_signal("mouse::enter", function () calendar.show() end)
widget:connect_signal("mouse::leave", function () calendar.hide() end)
widget:buttons(awful.util.table.join(awful.button({ }, 1, function ()
calendar.show(0, -1, calendar.scr_pos) end),
awful.button({ }, 3, function ()
calendar.show(0, 1, calendar.scr_pos) end),
awful.button({ }, 4, function ()
calendar.show(0, -1, calendar.scr_pos) end),
awful.button({ }, 5, function ()
calendar.show(0, 1, calendar.scr_pos) end)))
end
end
return setmetatable(calendar, { __call = function(_, ...) return create(...) end })
return calendar

View File

@ -46,7 +46,9 @@ end
function redshift:attach(widget, fun)
redshift.update_fun = fun or function() end
if not redshift.pid then redshift:start() end
widget:buttons(awful.util.table.join(awful.button({}, 1, function () redshift:toggle() end)))
if widget then
widget:buttons(awful.util.table.join(awful.button({}, 1, function () redshift:toggle() end)))
end
end
return redshift

View File

@ -6,144 +6,77 @@
--]]
local icons_dir = require("lain.helpers").icons_dir
local awful = require("awful")
local beautiful = require("beautiful")
local naughty = require("naughty")
local io = io
local string = { len = string.len }
local tonumber = tonumber
local setmetatable = setmetatable
local helpers = require("lain.helpers")
local awful = require("awful")
local naughty = require("naughty")
local string = { format = string.format, gsub = string.gsub }
-- Taskwarrior notification
-- lain.widgets.contrib.task
local task = {}
local task_notification = nil
function findLast(haystack, needle)
local i=haystack:match(".*"..needle.."()")
if i==nil then return nil else return i-1 end
end
function task.hide()
if task_notification ~= nil then
naughty.destroy(task_notification)
task_notification = nil
end
if not task.notification then return end
naughty.destroy(task.notification)
task.notification = nil
end
function task.show(scr_pos)
function task.show(scr)
task.hide()
local f, c_text, scrp
if task.followtag then
scrp = awful.screen.focused()
else
scrp = scr_pos or task.scr_pos
task.notification_preset.screen = awful.screen.focused()
elseif scr then
task.notification_preset.screen = scr
end
f = io.popen('task ' .. task.cmdline)
c_text = "<span font='"
.. task.font .. " "
.. task.font_size .. "'>"
.. awful.util.escape(f:read("*all"):gsub("\n*$", ""))
.. "</span>"
f:close()
task_notification = naughty.notify({ title = "[task next]",
text = c_text,
icon = task.notify_icon,
position = task.position,
fg = task.fg,
bg = task.bg,
timeout = task.timeout,
screen = scrp
})
helpers.async(string.format("%s -c '%s'", awful.util.shell, task.cmd),
function(f)
task.notification = naughty.notify({
preset = task_notification_preset,
title = task.cmd,
text = markup.font(task.notification_preset.font,
awful.util.escape(f:gsub("\n*$", "")))
})
end)
end
function task.prompt_add()
awful.prompt.run({ prompt = "Add task: " },
mypromptbox[awful.screen.focused()].widget,
function (...)
local f = io.popen("task add " .. ...)
c_text = "\n<span font='"
.. task.font .. " "
.. task.font_size .. "'>"
.. awful.util.escape(f:read("*all"))
.. "</span>"
f:close()
naughty.notify({
text = c_text,
icon = task.notify_icon,
position = task.position,
fg = task.fg,
bg = task.bg,
timeout = task.timeout,
})
end,
nil,
awful.util.getdir("cache") .. "/history_task_add")
end
function task.prompt_search()
awful.prompt.run({ prompt = "Search task: " },
mypromptbox[awful.screen.focused()].widget,
function (...)
local f = io.popen("task " .. ...)
c_text = f:read("*all"):gsub(" \n*$", "")
f:close()
if string.len(c_text) == 0
then
c_text = "No results found."
else
c_text = "<span font='"
.. task.font .. " "
.. task.font_size .. "'>"
.. awful.util.escape(c_text)
.. "</span>"
end
naughty.notify({
title = "[task next " .. ... .. "]",
text = c_text,
icon = task.notify_icon,
position = task.position,
fg = task.fg,
bg = task.bg,
timeout = task.timeout,
screen = awful.screen.focused()
})
end,
nil,
awful.util.getdir("cache") .. "/history_task")
function task.prompt()
awful.prompt.run {
prompt = task.prompt_text,
textbox = awful.screen.focused().mypromptbox.widget,
exe_callback = function(t)
helpers.async(string.format("%s -c '%s'", awful.util.shell, 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)
local args = args or {}
local args = args or {}
task.show_cmd = args.cmd or "task"
task.prompt_text = args.prompt_text or "Enter task command: "
task.followtag = args.followtag or false
task.notification_preset = args.notification_preset
task.font_size = tonumber(args.font_size) or 12
task.font = args.font or beautiful.font:sub(beautiful.font:find(""),
findLast(beautiful.font, " "))
task.fg = args.fg or beautiful.fg_normal or "#FFFFFF"
task.bg = args.bg or beautiful.bg_normal or "#FFFFFF"
task.position = args.position or "top_right"
task.timeout = args.timeout or 7
task.scr_pos = args.scr_pos or 1
task.followtag = args.followtag or false
task.cmdline = args.cmdline or "next"
if not task.notification_preset then
task.notification_preset = naughty.config.defaults
task.notification_preset.font = "Monospace 10"
task.notification_preset.icon = helpers.icons_dir .. "/taskwarrior.png"
end
task.notify_icon = icons_dir .. "/taskwarrior/task.png"
task.notify_icon_small = icons_dir .. "/taskwarrior/tasksmall.png"
widget:connect_signal("mouse::enter", function () task.show(task.scr_pos) end)
widget:connect_signal("mouse::leave", function () task.hide() 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 setmetatable(task, { __call = function(_, ...) return create(...) end })
return task

View File

@ -37,7 +37,7 @@ function fs.show(seconds, scr)
if fs.followtag then
fs.notification_preset.screen = focused()
elseif scr then
fs.notification_preset.screen = scr
fs.notification_preset.screen = scr or 1
end
local cmd = (fs.options and string.format("dfs %s", fs.options)) or "dfs"
@ -74,7 +74,6 @@ local function worker(args)
helpers.set_map(partition, false)
function update()
fs_info, fs_now = {}, {}
helpers.async(string.format("%s -c 'LC_ALL=C df -k --output=target,size,used,avail,pcent'", shell), function(f)
@ -107,11 +106,9 @@ local function worker(args)
if notify == "on" and tonumber(fs_now.used) >= 99 and not helpers.get_map(partition) then
naughty.notify({
title = "Warning",
text = partition .. " is empty!",
timeout = 8,
fg = "#000000",
bg = "#FFFFFF"
preset = naughty.config.presets.critical,
title = "Warning",
text = partition .. " is empty",
})
helpers.set_map(partition, true)
else

2
wiki

@ -1 +1 @@
Subproject commit 66836bbf1ffc0dd3bd3aef4799fff78ded9df4ec
Subproject commit 2f7c2a96a29a94829acf0b9e7fb614a7432a5092