mirror of https://github.com/lcpz/lain.git
merging with upstream
This commit is contained in:
parent
edc6e0013e
commit
010e60a8cd
|
@ -1,41 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2014, Luke Bonham
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local newtimer = require("lain.helpers").newtimer
|
|
||||||
local async = require("lain.asyncshell")
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- Basic template for custom widgets
|
|
||||||
-- Asynchronous version
|
|
||||||
-- lain.widgets.abase
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
local abase = {}
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 5
|
|
||||||
local cmd = args.cmd or ""
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
|
|
||||||
abase.widget = wibox.widget.textbox('')
|
|
||||||
|
|
||||||
function abase.update()
|
|
||||||
async.request(cmd, function(f)
|
|
||||||
output = f
|
|
||||||
widget = abase.widget
|
|
||||||
settings()
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
newtimer(cmd, timeout, abase.update)
|
|
||||||
|
|
||||||
return setmetatable(abase, { __index = abase.widget })
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable({}, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,81 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2013, Luke Bonham
|
|
||||||
* (c) 2010, Adrian C. <anrxc@sysphere.org>
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local newtimer = require("lain.helpers").newtimer
|
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
local io = { popen = io.popen }
|
|
||||||
=======
|
|
||||||
local read_pipe = require("lain.helpers").read_pipe
|
|
||||||
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
local string = { match = string.match,
|
|
||||||
format = string.format }
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- ALSA volume
|
|
||||||
-- lain.widgets.alsa
|
|
||||||
local alsa = {}
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 5
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
|
|
||||||
alsa.cmd = args.cmd or "amixer"
|
|
||||||
alsa.channel = args.channel or "Master"
|
|
||||||
|
|
||||||
alsa.widget = wibox.widget.textbox('')
|
|
||||||
|
|
||||||
function alsa.update()
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local f = assert(io.popen(string.format("%s get %s", alsa.cmd, alsa.channel)))
|
|
||||||
local mixer = f:read("*a")
|
|
||||||
f:close()
|
|
||||||
=======
|
|
||||||
local mixer = read_pipe(string.format("%s get %s", alsa.cmd, alsa.channel))
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
volume_now = {}
|
|
||||||
|
|
||||||
volume_now.level, volume_now.status = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
|
|
||||||
|
|
||||||
if volume_now.level == nil
|
|
||||||
then
|
|
||||||
volume_now.level = "0"
|
|
||||||
volume_now.status = "off"
|
|
||||||
end
|
|
||||||
|
|
||||||
if volume_now.status == ""
|
|
||||||
then
|
|
||||||
if volume_now.level == "0"
|
|
||||||
then
|
|
||||||
volume_now.status = "off"
|
|
||||||
else
|
|
||||||
volume_now.status = "on"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
widget = alsa.widget
|
|
||||||
settings()
|
|
||||||
end
|
|
||||||
|
|
||||||
timer_id = string.format("alsa-%s-%s", alsa.cmd, alsa.channel)
|
|
||||||
|
|
||||||
newtimer(timer_id, timeout, alsa.update)
|
|
||||||
|
|
||||||
return setmetatable(alsa, { __index = alsa.widget })
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(alsa, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,215 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2013, Luke Bonham
|
|
||||||
* (c) 2013, Rman
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local newtimer = require("lain.helpers").newtimer
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
local read_pipe = require("lain.helpers").read_pipe
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
local awful = require("awful")
|
|
||||||
local beautiful = require("beautiful")
|
|
||||||
local naughty = require("naughty")
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local io = { popen = io.popen }
|
|
||||||
local math = { modf = math.modf }
|
|
||||||
=======
|
|
||||||
local math = { modf = math.modf }
|
|
||||||
local mouse = mouse
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
local string = { format = string.format,
|
|
||||||
match = string.match,
|
|
||||||
rep = string.rep }
|
|
||||||
local tonumber = tonumber
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- ALSA volume bar
|
|
||||||
-- lain.widgets.alsabar
|
|
||||||
local alsabar = {
|
|
||||||
<<<<<<< HEAD
|
|
||||||
card = "0",
|
|
||||||
=======
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
channel = "Master",
|
|
||||||
step = "2%",
|
|
||||||
|
|
||||||
colors = {
|
|
||||||
background = beautiful.bg_normal,
|
|
||||||
mute = "#EB8F8F",
|
|
||||||
unmute = "#A4CE8A"
|
|
||||||
},
|
|
||||||
|
|
||||||
terminal = terminal or "xterm",
|
|
||||||
mixer = terminal .. " -e alsamixer",
|
|
||||||
|
|
||||||
notifications = {
|
|
||||||
font = beautiful.font:sub(beautiful.font:find(""), beautiful.font:find(" ")),
|
|
||||||
font_size = "11",
|
|
||||||
color = beautiful.fg_normal,
|
|
||||||
bar_size = 18,
|
|
||||||
screen = 1
|
|
||||||
},
|
|
||||||
|
|
||||||
_current_level = 0,
|
|
||||||
_muted = false
|
|
||||||
}
|
|
||||||
|
|
||||||
function alsabar.notify()
|
|
||||||
alsabar.update()
|
|
||||||
|
|
||||||
local preset = {
|
|
||||||
title = "",
|
|
||||||
text = "",
|
|
||||||
timeout = 5,
|
|
||||||
screen = alsabar.notifications.screen,
|
|
||||||
font = alsabar.notifications.font .. " " ..
|
|
||||||
alsabar.notifications.font_size,
|
|
||||||
fg = alsabar.notifications.color
|
|
||||||
}
|
|
||||||
|
|
||||||
if alsabar._muted
|
|
||||||
then
|
|
||||||
preset.title = alsabar.channel .. " - Muted"
|
|
||||||
else
|
|
||||||
preset.title = alsabar.channel .. " - " .. alsabar._current_level .. "%"
|
|
||||||
end
|
|
||||||
|
|
||||||
int = math.modf((alsabar._current_level / 100) * alsabar.notifications.bar_size)
|
|
||||||
preset.text = "["
|
|
||||||
.. string.rep("|", int)
|
|
||||||
.. string.rep(" ", alsabar.notifications.bar_size - int)
|
|
||||||
.. "]"
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
if alsabar.followmouse then
|
|
||||||
preset.screen = mouse.screen
|
|
||||||
end
|
|
||||||
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
if alsabar._notify ~= nil then
|
|
||||||
alsabar._notify = naughty.notify ({
|
|
||||||
replaces_id = alsabar._notify.id,
|
|
||||||
preset = preset,
|
|
||||||
})
|
|
||||||
else
|
|
||||||
alsabar._notify = naughty.notify ({
|
|
||||||
preset = preset,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 5
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
local width = args.width or 63
|
|
||||||
local height = args.heigth or 1
|
|
||||||
local ticks = args.ticks or false
|
|
||||||
local ticks_size = args.ticks_size or 7
|
|
||||||
local vertical = args.vertical or false
|
|
||||||
|
|
||||||
alsabar.cmd = args.cmd or "amixer"
|
|
||||||
alsabar.channel = args.channel or alsabar.channel
|
|
||||||
alsabar.step = args.step or alsabar.step
|
|
||||||
alsabar.colors = args.colors or alsabar.colors
|
|
||||||
alsabar.notifications = args.notifications or alsabar.notifications
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
alsabar.followmouse = args.followmouse or false
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
alsabar.bar = awful.widget.progressbar()
|
|
||||||
|
|
||||||
alsabar.bar:set_background_color(alsabar.colors.background)
|
|
||||||
alsabar.bar:set_color(alsabar.colors.unmute)
|
|
||||||
alsabar.tooltip = awful.tooltip({ objects = { alsabar.bar } })
|
|
||||||
alsabar.bar:set_width(width)
|
|
||||||
alsabar.bar:set_height(height)
|
|
||||||
alsabar.bar:set_ticks(ticks)
|
|
||||||
alsabar.bar:set_ticks_size(ticks_size)
|
|
||||||
alsabar.bar:set_vertical(vertical)
|
|
||||||
|
|
||||||
function alsabar.update()
|
|
||||||
-- Get mixer control contents
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local f = assert(io.popen(string.format("%s get %s", alsabar.cmd, alsabar.channel)))
|
|
||||||
local mixer = f:read("*a")
|
|
||||||
f:close()
|
|
||||||
=======
|
|
||||||
local mixer = read_pipe(string.format("%s get %s", alsabar.cmd, alsabar.channel))
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
-- Capture mixer control state: [5%] ... ... [on]
|
|
||||||
local volu, mute = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
|
|
||||||
|
|
||||||
if volu == nil then
|
|
||||||
volu = 0
|
|
||||||
mute = "off"
|
|
||||||
end
|
|
||||||
|
|
||||||
alsabar._current_level = tonumber(volu)
|
|
||||||
alsabar.bar:set_value(alsabar._current_level / 100)
|
|
||||||
if not mute and tonumber(volu) == 0 or mute == "off"
|
|
||||||
then
|
|
||||||
alsabar._muted = true
|
|
||||||
alsabar.tooltip:set_text (" [Muted] ")
|
|
||||||
alsabar.bar:set_color(alsabar.colors.mute)
|
|
||||||
else
|
|
||||||
alsabar._muted = false
|
|
||||||
alsabar.tooltip:set_text(string.format(" %s:%s ", alsabar.channel, volu))
|
|
||||||
alsabar.bar:set_color(alsabar.colors.unmute)
|
|
||||||
end
|
|
||||||
|
|
||||||
volume_now = {}
|
|
||||||
volume_now.level = tonumber(volu)
|
|
||||||
volume_now.status = mute
|
|
||||||
settings()
|
|
||||||
end
|
|
||||||
|
|
||||||
alsabar.bar:buttons (awful.util.table.join (
|
|
||||||
awful.button ({}, 1, function()
|
|
||||||
awful.util.spawn(alsabar.mixer)
|
|
||||||
end),
|
|
||||||
awful.button ({}, 3, function()
|
|
||||||
<<<<<<< HEAD
|
|
||||||
awful.util.spawn(string.format("amixer -c %s set %s toggle", alsabar.card, alsabar.channel))
|
|
||||||
alsabar.update()
|
|
||||||
end),
|
|
||||||
awful.button ({}, 4, function()
|
|
||||||
awful.util.spawn(string.format("amixer -c %s set %s %s+", alsabar.card, alsabar.channel, alsabar.step))
|
|
||||||
alsabar.update()
|
|
||||||
end),
|
|
||||||
awful.button ({}, 5, function()
|
|
||||||
awful.util.spawn(string.format("amixer -c %s set %s %s-", alsabar.card, alsabar.channel, alsabar.step))
|
|
||||||
=======
|
|
||||||
awful.util.spawn(string.format("%s set %s toggle", alsabar.cmd, alsabar.channel))
|
|
||||||
alsabar.update()
|
|
||||||
end),
|
|
||||||
awful.button ({}, 4, function()
|
|
||||||
awful.util.spawn(string.format("%s set %s %s+", alsabar.cmd, alsabar.channel, alsabar.step))
|
|
||||||
alsabar.update()
|
|
||||||
end),
|
|
||||||
awful.button ({}, 5, function()
|
|
||||||
awful.util.spawn(string.format("%s set %s %s-", alsabar.cmd, alsabar.channel, alsabar.step))
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
alsabar.update()
|
|
||||||
end)
|
|
||||||
))
|
|
||||||
|
|
||||||
timer_id = string.format("alsabar-%s-%s", alsabar.cmd, alsabar.channel)
|
|
||||||
|
|
||||||
newtimer(timer_id, timeout, alsabar.update)
|
|
||||||
|
|
||||||
return alsabar
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(alsabar, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,51 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2014, Luke Bonham
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local newtimer = require("lain.helpers").newtimer
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
local io = { popen = io.popen }
|
|
||||||
=======
|
|
||||||
local read_pipe = require("lain.helpers").read_pipe
|
|
||||||
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- Basic template for custom widgets
|
|
||||||
-- lain.widgets.base
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
local base = {}
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 5
|
|
||||||
local cmd = args.cmd or ""
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
|
|
||||||
base.widget = wibox.widget.textbox('')
|
|
||||||
|
|
||||||
function base.update()
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local f = assert(io.popen(cmd))
|
|
||||||
output = f:read("*a")
|
|
||||||
f:close()
|
|
||||||
=======
|
|
||||||
output = read_pipe(cmd)
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
widget = base.widget
|
|
||||||
settings()
|
|
||||||
end
|
|
||||||
|
|
||||||
newtimer(cmd, timeout, base.update)
|
|
||||||
|
|
||||||
return setmetatable(base, { __index = base.widget })
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable({}, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,181 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2013, Luke Bonham
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local icons_dir = require("lain.helpers").icons_dir
|
|
||||||
|
|
||||||
local awful = require("awful")
|
|
||||||
local beautiful = require("beautiful")
|
|
||||||
local naughty = require("naughty")
|
|
||||||
|
|
||||||
local io = { popen = io.popen }
|
|
||||||
local os = { date = os.date }
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
local mouse = mouse
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
local tonumber = tonumber
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- Calendar notification
|
|
||||||
-- lain.widgets.calendar
|
|
||||||
local calendar = {}
|
|
||||||
local cal_notification = nil
|
|
||||||
|
|
||||||
function calendar:hide()
|
|
||||||
if cal_notification ~= nil then
|
|
||||||
naughty.destroy(cal_notification)
|
|
||||||
cal_notification = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function calendar:show(t_out, inc_offset, scr)
|
|
||||||
calendar:hide()
|
|
||||||
|
|
||||||
local offs = inc_offset or 0
|
|
||||||
local tims = t_out or 0
|
|
||||||
local f, c_text
|
|
||||||
local today = tonumber(os.date('%d'))
|
|
||||||
local init_t = calendar.cal .. ' ' .. calendar.post_cal .. ' ' ..
|
|
||||||
' | sed -r -e "s/_\\x08//g" | sed -r -e "s/(^| )('
|
|
||||||
|
|
||||||
calendar.offset = calendar.offset + offs
|
|
||||||
|
|
||||||
if offs == 0 or calendar.offset == 0
|
|
||||||
then -- current month showing, today highlighted
|
|
||||||
calendar.offset = 0
|
|
||||||
calendar.notify_icon = calendar.icons .. today .. ".png"
|
|
||||||
|
|
||||||
-- bg and fg inverted to highlight today
|
|
||||||
f = io.popen( init_t .. today ..
|
|
||||||
')($| )/\\1<b><span foreground=\\"'
|
|
||||||
.. calendar.bg ..
|
|
||||||
'\\" background=\\"'
|
|
||||||
.. calendar.fg ..
|
|
||||||
'\\">\\2<\\/span><\\/b>\\3/"' )
|
|
||||||
|
|
||||||
else -- no current month showing, no day to highlight
|
|
||||||
local month = tonumber(os.date('%m'))
|
|
||||||
local year = tonumber(os.date('%Y'))
|
|
||||||
|
|
||||||
month = month + calendar.offset
|
|
||||||
|
|
||||||
if month > 12 then
|
|
||||||
month = month % 12
|
|
||||||
year = year + 1
|
|
||||||
if month <= 0 then
|
|
||||||
month = 12
|
|
||||||
end
|
|
||||||
elseif month < 1 then
|
|
||||||
month = month + 12
|
|
||||||
year = year - 1
|
|
||||||
if month <= 0 then
|
|
||||||
month = 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
calendar.notify_icon = nil
|
|
||||||
|
|
||||||
f = io.popen(calendar.cal .. ' ' .. month .. ' ' .. year .. ' ' ..
|
|
||||||
calendar.post_cal)
|
|
||||||
end
|
|
||||||
|
|
||||||
c_text = "<tt><span font='" .. calendar.font .. " "
|
|
||||||
.. calendar.font_size .. "'><b>"
|
|
||||||
.. f:read() .. "</b>\n\n"
|
|
||||||
.. f:read() .. "\n"
|
|
||||||
<<<<<<< HEAD
|
|
||||||
.. f:read("*a"):gsub("\n*$", "")
|
|
||||||
.. "</span></tt>"
|
|
||||||
f:close()
|
|
||||||
|
|
||||||
=======
|
|
||||||
.. f:read("*all"):gsub("\n*$", "")
|
|
||||||
.. "</span></tt>"
|
|
||||||
f:close()
|
|
||||||
|
|
||||||
if calendar.followmouse then
|
|
||||||
scrp = mouse.screen
|
|
||||||
else
|
|
||||||
scrp = scr or calendar.scr_pos
|
|
||||||
end
|
|
||||||
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
cal_notification = naughty.notify({
|
|
||||||
text = c_text,
|
|
||||||
icon = calendar.notify_icon,
|
|
||||||
position = calendar.position,
|
|
||||||
fg = calendar.fg,
|
|
||||||
bg = calendar.bg,
|
|
||||||
timeout = tims,
|
|
||||||
<<<<<<< HEAD
|
|
||||||
screen = scr or 1
|
|
||||||
=======
|
|
||||||
screen = scrp
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
function calendar:attach(widget, args)
|
|
||||||
local args = args or {}
|
|
||||||
<<<<<<< HEAD
|
|
||||||
calendar.cal = args.cal or "/usr/bin/cal"
|
|
||||||
calendar.post_cal = args.post_cal or ""
|
|
||||||
calendar.icons = args.icons or icons_dir .. "cal/white/"
|
|
||||||
calendar.font = args.font or beautiful.font:sub(beautiful.font:find(""),
|
|
||||||
beautiful.font:find(" "))
|
|
||||||
calendar.font_size = tonumber(args.font_size) or 11
|
|
||||||
calendar.fg = args.fg or beautiful.fg_normal or "#FFFFFF"
|
|
||||||
calendar.bg = args.bg or beautiful.bg_normal or "#FFFFFF"
|
|
||||||
calendar.position = args.position or "top_right"
|
|
||||||
calendar.scr_pos = args.scr_pos or 1
|
|
||||||
|
|
||||||
calendar.offset = 0
|
|
||||||
calendar.notify_icon = nil
|
|
||||||
|
|
||||||
widget:connect_signal("mouse::enter", function () calendar:show(0, 0, 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, scr_pos) end),
|
|
||||||
awful.button({ }, 3, function ()
|
|
||||||
calendar:show(0, 1, scr_pos) end),
|
|
||||||
awful.button({ }, 4, function ()
|
|
||||||
calendar:show(0, -1, scr_pos) end),
|
|
||||||
awful.button({ }, 5, function ()
|
|
||||||
calendar:show(0, 1, scr_pos) end)))
|
|
||||||
=======
|
|
||||||
|
|
||||||
calendar.cal = args.cal or "/usr/bin/cal"
|
|
||||||
calendar.post_cal = args.post_cal or ""
|
|
||||||
calendar.icons = args.icons or icons_dir .. "cal/white/"
|
|
||||||
calendar.font = args.font or beautiful.font:sub(beautiful.font:find(""),
|
|
||||||
beautiful.font:find(" "))
|
|
||||||
calendar.font_size = tonumber(args.font_size) or 11
|
|
||||||
calendar.fg = args.fg or beautiful.fg_normal or "#FFFFFF"
|
|
||||||
calendar.bg = args.bg or beautiful.bg_normal or "#FFFFFF"
|
|
||||||
calendar.position = args.position or "top_right"
|
|
||||||
calendar.scr_pos = args.scr_pos or 1
|
|
||||||
calendar.followmouse = args.followmouse or false
|
|
||||||
|
|
||||||
calendar.offset = 0
|
|
||||||
calendar.notify_icon = nil
|
|
||||||
|
|
||||||
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)))
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(calendar, { __call = function(_, ...) return create(...) end })
|
|
|
@ -1,153 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2013, Luke Bonham
|
|
||||||
* (c) 2010, Adrian C. <anrxc@sysphere.org>
|
|
||||||
* (c) 2009, Lucas de Vries <lucas@glacicle.com>
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
|
||||||
|
|
||||||
local beautiful = require("beautiful")
|
|
||||||
local wibox = require("wibox")
|
|
||||||
local naughty = require("naughty")
|
|
||||||
|
|
||||||
local io = { popen = io.popen }
|
|
||||||
local pairs = pairs
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
local mouse = mouse
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
local string = { match = string.match,
|
|
||||||
format = string.format }
|
|
||||||
local tonumber = tonumber
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- File system disk space usage
|
|
||||||
-- lain.widgets.fs
|
|
||||||
local fs = {}
|
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
local notification = nil
|
|
||||||
fs_notification_preset = { fg = beautiful.fg_normal }
|
|
||||||
|
|
||||||
function fs:hide()
|
|
||||||
if notification ~= nil then
|
|
||||||
naughty.destroy(notification)
|
|
||||||
notification = nil
|
|
||||||
=======
|
|
||||||
local fs_notification = nil
|
|
||||||
|
|
||||||
function fs:hide()
|
|
||||||
if fs_notification ~= nil then
|
|
||||||
naughty.destroy(fs_notification)
|
|
||||||
fs_notification = nil
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function fs:show(t_out)
|
|
||||||
fs:hide()
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local f = io.popen(helpers.scripts_dir .. "dfs")
|
|
||||||
ws = f:read("*a"):gsub("\n*$", "")
|
|
||||||
f:close()
|
|
||||||
|
|
||||||
notification = naughty.notify({
|
|
||||||
preset = fs_notification_preset,
|
|
||||||
text = ws,
|
|
||||||
timeout = t_out,
|
|
||||||
=======
|
|
||||||
local ws = helpers.read_pipe(helpers.scripts_dir .. "dfs"):gsub("\n*$", "")
|
|
||||||
|
|
||||||
if fs.followmouse then
|
|
||||||
fs.notification_preset.screen = mouse.screen
|
|
||||||
end
|
|
||||||
|
|
||||||
fs_notification = naughty.notify({
|
|
||||||
preset = fs.notification_preset,
|
|
||||||
text = ws,
|
|
||||||
timeout = t_out
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Unit definitions
|
|
||||||
local unit = { ["mb"] = 1024, ["gb"] = 1024^2 }
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 600
|
|
||||||
local partition = args.partition or "/"
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
=======
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 600
|
|
||||||
local partition = args.partition or "/"
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
|
|
||||||
fs.followmouse = args.followmouse or false
|
|
||||||
fs.notification_preset = args.notification_preset or { fg = beautiful.fg_normal }
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
fs.widget = wibox.widget.textbox('')
|
|
||||||
|
|
||||||
helpers.set_map(partition, false)
|
|
||||||
|
|
||||||
function update()
|
|
||||||
fs_info = {}
|
|
||||||
fs_now = {}
|
|
||||||
local f = assert(io.popen("LC_ALL=C df -kP"))
|
|
||||||
|
|
||||||
for line in f:lines() do -- Match: (size) (used)(avail)(use%) (mount)
|
|
||||||
local s = string.match(line, "^.-[%s]([%d]+)")
|
|
||||||
local u,a,p = string.match(line, "([%d]+)[%D]+([%d]+)[%D]+([%d]+)%%")
|
|
||||||
local m = string.match(line, "%%[%s]([%p%w]+)")
|
|
||||||
|
|
||||||
if u and m then -- Handle 1st line and broken regexp
|
|
||||||
fs_info[m .. " size_mb"] = string.format("%.1f", tonumber(s) / unit["mb"])
|
|
||||||
fs_info[m .. " size_gb"] = string.format("%.1f", tonumber(s) / unit["gb"])
|
|
||||||
fs_info[m .. " used_p"] = tonumber(p)
|
|
||||||
fs_info[m .. " avail_p"] = 100 - tonumber(p)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
f:close()
|
|
||||||
|
|
||||||
fs_now.used = tonumber(fs_info[partition .. " used_p"]) or 0
|
|
||||||
fs_now.available = tonumber(fs_info[partition .. " avail_p"]) or 0
|
|
||||||
fs_now.size_mb = tonumber(fs_info[partition .. " size_mb"]) or 0
|
|
||||||
fs_now.size_gb = tonumber(fs_info[partition .. " size_gb"]) or 0
|
|
||||||
|
|
||||||
widget = fs.widget
|
|
||||||
settings()
|
|
||||||
|
|
||||||
if fs_now.used >= 99 and not helpers.get_map(partition)
|
|
||||||
then
|
|
||||||
naughty.notify({
|
|
||||||
title = "warning",
|
|
||||||
text = partition .. " ran out!\nmake some room",
|
|
||||||
timeout = 8,
|
|
||||||
fg = "#000000",
|
|
||||||
bg = "#FFFFFF",
|
|
||||||
})
|
|
||||||
helpers.set_map(partition, true)
|
|
||||||
else
|
|
||||||
helpers.set_map(partition, false)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
fs.widget:connect_signal('mouse::enter', function () fs:show(0) end)
|
|
||||||
fs.widget:connect_signal('mouse::leave', function () fs:hide() end)
|
|
||||||
|
|
||||||
helpers.newtimer(partition, timeout, update)
|
|
||||||
|
|
||||||
return setmetatable(fs, { __index = fs.widget })
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(fs, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,131 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2013, Luke Bonham
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
|
||||||
local async = require("lain.asyncshell")
|
|
||||||
|
|
||||||
local naughty = require("naughty")
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
local mouse = mouse
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
local string = { format = string.format,
|
|
||||||
gsub = string.gsub }
|
|
||||||
local tonumber = tonumber
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- Mail IMAP check
|
|
||||||
-- lain.widgets.imap
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local imap = {}
|
|
||||||
local args = args or {}
|
|
||||||
|
|
||||||
local server = args.server
|
|
||||||
local mail = args.mail
|
|
||||||
local password = args.password
|
|
||||||
|
|
||||||
local port = args.port or 993
|
|
||||||
local timeout = args.timeout or 60
|
|
||||||
local is_plain = args.is_plain or false
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
=======
|
|
||||||
local imap = {}
|
|
||||||
local args = args or {}
|
|
||||||
|
|
||||||
local server = args.server
|
|
||||||
local mail = args.mail
|
|
||||||
local password = args.password
|
|
||||||
|
|
||||||
local port = args.port or 993
|
|
||||||
local timeout = args.timeout or 60
|
|
||||||
local is_plain = args.is_plain or false
|
|
||||||
local followmouse = args.followmouse or false
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
local head_command = "curl --connect-timeout 3 -fsm 3"
|
|
||||||
local request = "-X 'SEARCH (UNSEEN)'"
|
|
||||||
|
|
||||||
helpers.set_map(mail, 0)
|
|
||||||
|
|
||||||
if not is_plain
|
|
||||||
then
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local f = io.popen(password)
|
|
||||||
password = f:read("*a"):gsub("\n", "")
|
|
||||||
f:close()
|
|
||||||
=======
|
|
||||||
password = helpers.read_pipe(password):gsub("\n", "")
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
end
|
|
||||||
|
|
||||||
imap.widget = wibox.widget.textbox('')
|
|
||||||
|
|
||||||
function update()
|
|
||||||
mail_notification_preset = {
|
|
||||||
icon = helpers.icons_dir .. "mail.png",
|
|
||||||
position = "top_left"
|
|
||||||
}
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
if followmouse then
|
|
||||||
mail_notification_preset.screen = mouse.screen
|
|
||||||
end
|
|
||||||
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
curl = string.format("%s --url imaps://%s:%s/INBOX -u %s:%q %s -k",
|
|
||||||
head_command, server, port, mail, password, request)
|
|
||||||
|
|
||||||
async.request(curl, function(f)
|
|
||||||
<<<<<<< HEAD
|
|
||||||
ws = f:read("*a")
|
|
||||||
f:close()
|
|
||||||
|
|
||||||
_, mailcount = string.gsub(ws, "%d+", "")
|
|
||||||
=======
|
|
||||||
_, mailcount = string.gsub(f, "%d+", "")
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
_ = nil
|
|
||||||
|
|
||||||
widget = imap.widget
|
|
||||||
settings()
|
|
||||||
|
|
||||||
if mailcount >= 1 and mailcount > helpers.get_map(mail)
|
|
||||||
then
|
|
||||||
if mailcount == 1 then
|
|
||||||
nt = mail .. " has one new message"
|
|
||||||
else
|
|
||||||
nt = mail .. " has <b>" .. mailcount .. "</b> new messages"
|
|
||||||
end
|
|
||||||
naughty.notify({
|
|
||||||
preset = mail_notification_preset,
|
|
||||||
<<<<<<< HEAD
|
|
||||||
text = nt,
|
|
||||||
=======
|
|
||||||
text = nt
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
helpers.set_map(mail, mailcount)
|
|
||||||
end)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
helpers.newtimer(mail, timeout, update, true)
|
|
||||||
|
|
||||||
return setmetatable(imap, { __index = imap.widget })
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable({}, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,116 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2013, Luke Bonham
|
|
||||||
* (c) 2010-2012, Peter Hofmann
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local newtimer = require("lain.helpers").newtimer
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
local read_pipe = require("lain.helpers").read_pipe
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
local util = require("lain.util")
|
|
||||||
|
|
||||||
local io = { popen = io.popen }
|
|
||||||
local os = { getenv = os.getenv }
|
|
||||||
local pairs = pairs
|
|
||||||
local string = { len = string.len,
|
|
||||||
match = string.match }
|
|
||||||
local table = { sort = table.sort }
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- Maildir check
|
|
||||||
-- lain.widgets.maildir
|
|
||||||
local maildir = {}
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 60
|
|
||||||
local mailpath = args.mailpath or os.getenv("HOME") .. "/Mail"
|
|
||||||
local ignore_boxes = args.ignore_boxes or {}
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
|
|
||||||
maildir.widget = wibox.widget.textbox('')
|
|
||||||
|
|
||||||
function update()
|
|
||||||
-- Find pathes to mailboxes.
|
|
||||||
local p = io.popen("find " .. mailpath ..
|
|
||||||
" -mindepth 1 -maxdepth 1 -type d" ..
|
|
||||||
" -not -name .git")
|
|
||||||
local boxes = {}
|
|
||||||
repeat
|
|
||||||
line = p:read("*l")
|
|
||||||
if line ~= nil
|
|
||||||
then
|
|
||||||
-- Find all files in the "new" subdirectory. For each
|
|
||||||
-- file, print a single character (no newline). Don't
|
|
||||||
-- match files that begin with a dot.
|
|
||||||
-- Afterwards the length of this string is the number of
|
|
||||||
-- new mails in that box.
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local np = io.popen("find " .. line ..
|
|
||||||
"/new -mindepth 1 -type f " ..
|
|
||||||
"-not -name '.*' -printf a")
|
|
||||||
local mailstring = np:read("*a")
|
|
||||||
=======
|
|
||||||
local mailstring = read_pipe("find " .. line ..
|
|
||||||
"/new -mindepth 1 -type f " ..
|
|
||||||
"-not -name '.*' -printf a")
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
-- Strip off leading mailpath.
|
|
||||||
local box = string.match(line, mailpath .. "/*([^/]+)")
|
|
||||||
local nummails = string.len(mailstring)
|
|
||||||
if nummails > 0
|
|
||||||
then
|
|
||||||
boxes[box] = nummails
|
|
||||||
end
|
|
||||||
end
|
|
||||||
until line == nil
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
table.sort(boxes)
|
|
||||||
|
|
||||||
newmail = "no mail"
|
|
||||||
--Count the total number of mails irrespective of where it was found
|
|
||||||
=======
|
|
||||||
p:close()
|
|
||||||
table.sort(boxes)
|
|
||||||
|
|
||||||
newmail = "no mail"
|
|
||||||
-- Count the total number of mails irrespective of where it was found
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
total = 0
|
|
||||||
|
|
||||||
for box, number in pairs(boxes)
|
|
||||||
do
|
|
||||||
-- Add this box only if it's not to be ignored.
|
|
||||||
if not util.element_in_table(box, ignore_boxes)
|
|
||||||
then
|
|
||||||
total = total + number
|
|
||||||
if newmail == "no mail"
|
|
||||||
then
|
|
||||||
newmail = box .. "(" .. number .. ")"
|
|
||||||
else
|
|
||||||
newmail = newmail .. ", " ..
|
|
||||||
box .. "(" .. number .. ")"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
widget = maildir.widget
|
|
||||||
settings()
|
|
||||||
end
|
|
||||||
|
|
||||||
newtimer(mailpath, timeout, update, true)
|
|
||||||
return maildir.widget
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(maildir, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,147 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2013, Luke Bonham
|
|
||||||
* (c) 2010, Adrian C. <anrxc@sysphere.org>
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
|
||||||
local async = require("lain.asyncshell")
|
|
||||||
|
|
||||||
local escape_f = require("awful.util").escape
|
|
||||||
local naughty = require("naughty")
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
local os = { execute = os.execute,
|
|
||||||
getenv = os.getenv }
|
|
||||||
local math = { floor = math.floor }
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
local mouse = mouse
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
local string = { format = string.format,
|
|
||||||
match = string.match,
|
|
||||||
gmatch = string.gmatch }
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- MPD infos
|
|
||||||
-- lain.widgets.mpd
|
|
||||||
local mpd = {}
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 2
|
|
||||||
local password = args.password or ""
|
|
||||||
local host = args.host or "127.0.0.1"
|
|
||||||
local port = args.port or "6600"
|
|
||||||
local music_dir = args.music_dir or os.getenv("HOME") .. "/Music"
|
|
||||||
local cover_size = args.cover_size or 100
|
|
||||||
local default_art = args.default_art or ""
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
local followmouse = args.followmouse or false
|
|
||||||
local echo_cmd = args.echo_cmd or "echo"
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
|
|
||||||
local mpdcover = helpers.scripts_dir .. "mpdcover"
|
|
||||||
local mpdh = "telnet://" .. host .. ":" .. port
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local echo = "echo 'password " .. password .. "\nstatus\ncurrentsong\nclose'"
|
|
||||||
=======
|
|
||||||
local echo = echo_cmd .. " 'password " .. password .. "\nstatus\ncurrentsong\nclose'"
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
mpd.widget = wibox.widget.textbox('')
|
|
||||||
|
|
||||||
mpd_notification_preset = {
|
|
||||||
title = "Now playing",
|
|
||||||
timeout = 6
|
|
||||||
}
|
|
||||||
|
|
||||||
helpers.set_map("current mpd track", nil)
|
|
||||||
|
|
||||||
function mpd.update()
|
|
||||||
async.request(echo .. " | curl --connect-timeout 1 -fsm 3 " .. mpdh, function (f)
|
|
||||||
mpd_now = {
|
|
||||||
state = "N/A",
|
|
||||||
file = "N/A",
|
|
||||||
artist = "N/A",
|
|
||||||
title = "N/A",
|
|
||||||
album = "N/A",
|
|
||||||
date = "N/A",
|
|
||||||
time = "N/A",
|
|
||||||
elapsed = "N/A"
|
|
||||||
}
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
for line in f:lines() do
|
|
||||||
=======
|
|
||||||
for line in string.gmatch(f, "[^\n]+") do
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
for k, v in string.gmatch(line, "([%w]+):[%s](.*)$") do
|
|
||||||
if k == "state" then mpd_now.state = v
|
|
||||||
elseif k == "file" then mpd_now.file = v
|
|
||||||
elseif k == "Artist" then mpd_now.artist = escape_f(v)
|
|
||||||
elseif k == "Title" then mpd_now.title = escape_f(v)
|
|
||||||
elseif k == "Album" then mpd_now.album = escape_f(v)
|
|
||||||
elseif k == "Date" then mpd_now.date = escape_f(v)
|
|
||||||
elseif k == "Time" then mpd_now.time = v
|
|
||||||
elseif k == "elapsed" then mpd_now.elapsed = string.match(v, "%d+")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
mpd_notification_preset.text = string.format("%s (%s) - %s\n%s", mpd_now.artist,
|
|
||||||
mpd_now.album, mpd_now.date, mpd_now.title)
|
|
||||||
widget = mpd.widget
|
|
||||||
settings()
|
|
||||||
|
|
||||||
if mpd_now.state == "play"
|
|
||||||
then
|
|
||||||
if mpd_now.title ~= helpers.get_map("current mpd track")
|
|
||||||
then
|
|
||||||
helpers.set_map("current mpd track", mpd_now.title)
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
if string.match(mpd_now.file, "http://") == nil
|
|
||||||
=======
|
|
||||||
if string.match(mpd_now.file, "http.*://") == nil
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
then -- local file
|
|
||||||
os.execute(string.format("%s %q %q %d %q", mpdcover, music_dir,
|
|
||||||
mpd_now.file, cover_size, default_art))
|
|
||||||
current_icon = "/tmp/mpdcover.png"
|
|
||||||
else -- http stream
|
|
||||||
current_icon = default_art
|
|
||||||
end
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
if followmouse then
|
|
||||||
mpd_notification_preset.screen = mouse.screen
|
|
||||||
end
|
|
||||||
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
mpd.id = naughty.notify({
|
|
||||||
preset = mpd_notification_preset,
|
|
||||||
icon = current_icon,
|
|
||||||
replaces_id = mpd.id,
|
|
||||||
}).id
|
|
||||||
end
|
|
||||||
elseif mpd_now.state ~= "pause"
|
|
||||||
then
|
|
||||||
helpers.set_map("current mpd track", nil)
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
helpers.newtimer("mpd", timeout, mpd.update)
|
|
||||||
|
|
||||||
return setmetatable(mpd, { __index = mpd.widget })
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(mpd, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,116 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2013, Luke Bonham
|
|
||||||
* (c) 2010-2012, Peter Hofmann
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
|
||||||
|
|
||||||
local notify_fg = require("beautiful").fg_focus
|
|
||||||
local naughty = require("naughty")
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local io = { popen = io.popen }
|
|
||||||
=======
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
local string = { format = string.format,
|
|
||||||
gsub = string.gsub,
|
|
||||||
match = string.match }
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- Network infos
|
|
||||||
-- lain.widgets.net
|
|
||||||
local net = {
|
|
||||||
last_t = 0,
|
|
||||||
last_r = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
function net.get_device()
|
|
||||||
<<<<<<< HEAD
|
|
||||||
f = io.popen("ip link show | cut -d' ' -f2,9")
|
|
||||||
ws = f:read("*a")
|
|
||||||
f:close()
|
|
||||||
=======
|
|
||||||
local ws = helpers.read_pipe("ip link show | cut -d' ' -f2,9")
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
ws = ws:match("%w+: UP") or ws:match("ppp%w+: UNKNOWN")
|
|
||||||
if ws ~= nil then
|
|
||||||
return ws:match("(%w+):")
|
|
||||||
else
|
|
||||||
return "network off"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 2
|
|
||||||
local units = args.units or 1024 --kb
|
|
||||||
local notify = args.notify or "on"
|
|
||||||
local screen = args.screen or 1
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
|
|
||||||
iface = args.iface or net.get_device()
|
|
||||||
|
|
||||||
net.widget = wibox.widget.textbox('')
|
|
||||||
|
|
||||||
helpers.set_map(iface, true)
|
|
||||||
|
|
||||||
function update()
|
|
||||||
net_now = {}
|
|
||||||
|
|
||||||
if iface == "" or string.match(iface, "network off")
|
|
||||||
then
|
|
||||||
iface = net.get_device()
|
|
||||||
end
|
|
||||||
|
|
||||||
net_now.carrier = helpers.first_line('/sys/class/net/' .. iface ..
|
|
||||||
'/carrier') or "0"
|
|
||||||
net_now.state = helpers.first_line('/sys/class/net/' .. iface ..
|
|
||||||
'/operstate') or "down"
|
|
||||||
local now_t = helpers.first_line('/sys/class/net/' .. iface ..
|
|
||||||
'/statistics/tx_bytes') or 0
|
|
||||||
local now_r = helpers.first_line('/sys/class/net/' .. iface ..
|
|
||||||
'/statistics/rx_bytes') or 0
|
|
||||||
|
|
||||||
net_now.sent = (now_t - net.last_t) / timeout / units
|
|
||||||
net_now.sent = string.gsub(string.format('%.1f', net_now.sent), ",", ".")
|
|
||||||
|
|
||||||
net_now.received = (now_r - net.last_r) / timeout / units
|
|
||||||
net_now.received = string.gsub(string.format('%.1f', net_now.received), ",", ".")
|
|
||||||
|
|
||||||
widget = net.widget
|
|
||||||
settings()
|
|
||||||
|
|
||||||
net.last_t = now_t
|
|
||||||
net.last_r = now_r
|
|
||||||
|
|
||||||
if net_now.carrier ~= "1" and notify == "on"
|
|
||||||
then
|
|
||||||
if helpers.get_map(iface)
|
|
||||||
then
|
|
||||||
naughty.notify({
|
|
||||||
title = iface,
|
|
||||||
text = "no carrier",
|
|
||||||
timeout = 7,
|
|
||||||
position = "top_left",
|
|
||||||
icon = helpers.icons_dir .. "no_net.png",
|
|
||||||
fg = notify_fg or "#FFFFFF",
|
|
||||||
screen = screen
|
|
||||||
})
|
|
||||||
helpers.set_map(iface, false)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
helpers.set_map(iface, true)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
helpers.newtimer(iface, timeout, update)
|
|
||||||
return net.widget
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(net, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,49 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2013, Luke Bonham
|
|
||||||
* (c) 2010-2012, Peter Hofmann
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local newtimer = require("lain.helpers").newtimer
|
|
||||||
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
local io = { open = io.open }
|
|
||||||
local string = { match = string.match }
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- System load
|
|
||||||
-- lain.widgets.sysload
|
|
||||||
local sysload = {}
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 2
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
|
|
||||||
sysload.widget = wibox.widget.textbox('')
|
|
||||||
|
|
||||||
function update()
|
|
||||||
local f = io.open("/proc/loadavg")
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local ret = f:read("*a")
|
|
||||||
=======
|
|
||||||
local ret = f:read("*all")
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
f:close()
|
|
||||||
|
|
||||||
load_1, load_5, load_15 = string.match(ret, "([^%s]+) ([^%s]+) ([^%s]+)")
|
|
||||||
|
|
||||||
widget = sysload.widget
|
|
||||||
settings()
|
|
||||||
end
|
|
||||||
|
|
||||||
newtimer("sysload", timeout, update)
|
|
||||||
return sysload.widget
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(sysload, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,52 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2013, Luke Bonham
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local newtimer = require("lain.helpers").newtimer
|
|
||||||
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
local io = { open = io.open }
|
|
||||||
local tonumber = tonumber
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- coretemp
|
|
||||||
-- lain.widgets.temp
|
|
||||||
local temp = {}
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 2
|
|
||||||
local tempfile = args.tempfile or "/sys/class/thermal/thermal_zone0/temp"
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
|
|
||||||
temp.widget = wibox.widget.textbox('')
|
|
||||||
|
|
||||||
function update()
|
|
||||||
local f = io.open(tempfile)
|
|
||||||
if f ~= nil
|
|
||||||
then
|
|
||||||
<<<<<<< HEAD
|
|
||||||
coretemp_now = tonumber(f:read("*a")) / 1000
|
|
||||||
=======
|
|
||||||
coretemp_now = tonumber(f:read("*all")) / 1000
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
f:close()
|
|
||||||
else
|
|
||||||
coretemp_now = "N/A"
|
|
||||||
end
|
|
||||||
|
|
||||||
widget = temp.widget
|
|
||||||
settings()
|
|
||||||
end
|
|
||||||
|
|
||||||
newtimer("coretemp", timeout, update)
|
|
||||||
return temp.widget
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(temp, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,185 +0,0 @@
|
||||||
|
|
||||||
--[[
|
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
|
||||||
* (c) 2015, Luke Bonham
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local newtimer = require("lain.helpers").newtimer
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local async = require("lain.asyncshell")
|
|
||||||
local json = require("lain.util").dkjson
|
|
||||||
local lain_icons = require("lain.helpers").icons_dir
|
|
||||||
=======
|
|
||||||
local read_pipe = require("lain.helpers").read_pipe
|
|
||||||
|
|
||||||
local async = require("lain.asyncshell")
|
|
||||||
local json = require("lain.util").dkjson
|
|
||||||
local lain_icons = require("lain.helpers").icons_dir
|
|
||||||
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
local naughty = require("naughty")
|
|
||||||
local wibox = require("wibox")
|
|
||||||
|
|
||||||
local math = { floor = math.floor }
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
local mouse = mouse
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
local string = { format = string.format,
|
|
||||||
gsub = string.gsub }
|
|
||||||
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
|
|
||||||
-- OpenWeatherMap
|
|
||||||
-- current weather and X-days forecast
|
|
||||||
-- lain.widgets.weather
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local weather = {}
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 900 -- 15 min
|
|
||||||
local timeout_forecast = args.timeout or 86400 -- 24 hrs
|
|
||||||
local current_call = "curl -s 'http://api.openweathermap.org/data/2.5/weather?id=%s&units=%s&lang=%s'"
|
|
||||||
local forecast_call = "curl -s 'http://api.openweathermap.org/data/2.5/forecast/daily?id=%s&units=%s&lang=%s&cnt=%s'"
|
|
||||||
local city_id = args.city_id or 0 -- placeholder
|
|
||||||
local units = args.units or "metric"
|
|
||||||
local lang = args.lang or "en"
|
|
||||||
local cnt = args.cnt or 7
|
|
||||||
local date_cmd = args.date_cmd or "date -u -d @%d +'%%a %%d'"
|
|
||||||
local icons_path = args.icons_path or lain_icons .. "openweathermap/"
|
|
||||||
local w_notification_preset = args.w_notification_preset or {}
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
=======
|
|
||||||
local weather = {}
|
|
||||||
local args = args or {}
|
|
||||||
local timeout = args.timeout or 900 -- 15 min
|
|
||||||
local timeout_forecast = args.timeout or 86400 -- 24 hrs
|
|
||||||
local current_call = "curl -s 'http://api.openweathermap.org/data/2.5/weather?id=%s&units=%s&lang=%s'"
|
|
||||||
local forecast_call = "curl -s 'http://api.openweathermap.org/data/2.5/forecast/daily?id=%s&units=%s&lang=%s&cnt=%s'"
|
|
||||||
local city_id = args.city_id or 0 -- placeholder
|
|
||||||
local units = args.units or "metric"
|
|
||||||
local lang = args.lang or "en"
|
|
||||||
local cnt = args.cnt or 7
|
|
||||||
local date_cmd = args.date_cmd or "date -u -d @%d +'%%a %%d'"
|
|
||||||
local icons_path = args.icons_path or lain_icons .. "openweathermap/"
|
|
||||||
local notification_preset = args.notification_preset or {}
|
|
||||||
local followmouse = args.followmouse or false
|
|
||||||
local settings = args.settings or function() end
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
weather.widget = wibox.widget.textbox('')
|
|
||||||
weather.icon = wibox.widget.imagebox()
|
|
||||||
|
|
||||||
function weather.show(t_out)
|
|
||||||
weather.hide()
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
|
|
||||||
if followmouse then
|
|
||||||
notification_preset.screen = mouse.screen
|
|
||||||
end
|
|
||||||
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
weather.notification = naughty.notify({
|
|
||||||
text = weather.notification_text,
|
|
||||||
icon = weather.icon_path,
|
|
||||||
timeout = t_out,
|
|
||||||
<<<<<<< HEAD
|
|
||||||
preset = w_notification_preset
|
|
||||||
=======
|
|
||||||
preset = notification_preset
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
function weather.hide()
|
|
||||||
if weather.notification ~= nil then
|
|
||||||
naughty.destroy(weather.notification)
|
|
||||||
weather.notification = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function weather.attach(obj)
|
|
||||||
obj:connect_signal("mouse::enter", function()
|
|
||||||
weather.show(0)
|
|
||||||
end)
|
|
||||||
obj:connect_signal("mouse::leave", function()
|
|
||||||
weather.hide()
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
function weather.forecast_update()
|
|
||||||
local cmd = string.format(forecast_call, city_id, units, lang, cnt)
|
|
||||||
async.request(cmd, function(f)
|
|
||||||
<<<<<<< HEAD
|
|
||||||
j = f:read("*a")
|
|
||||||
f:close()
|
|
||||||
weather_now, pos, err = json.decode(j, 1, nil)
|
|
||||||
=======
|
|
||||||
weather_now, pos, err = json.decode(f, 1, nil)
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
if not err and weather_now ~= nil and tonumber(weather_now["cod"]) == 200 then
|
|
||||||
weather.notification_text = ''
|
|
||||||
for i = 1, weather_now["cnt"] do
|
|
||||||
<<<<<<< HEAD
|
|
||||||
local f = assert(io.popen(string.format(date_cmd, weather_now["list"][i]["dt"])))
|
|
||||||
day = string.gsub(f:read("a"), "\n", "")
|
|
||||||
f:close()
|
|
||||||
=======
|
|
||||||
day = string.gsub(read_pipe(string.format(date_cmd, weather_now["list"][i]["dt"])), "\n", "")
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
tmin = math.floor(weather_now["list"][i]["temp"]["min"])
|
|
||||||
tmax = math.floor(weather_now["list"][i]["temp"]["max"])
|
|
||||||
desc = weather_now["list"][i]["weather"][1]["description"]
|
|
||||||
|
|
||||||
weather.notification_text = weather.notification_text ..
|
|
||||||
string.format("<b>%s</b>: %s, %d - %d ", day, desc, tmin, tmax)
|
|
||||||
|
|
||||||
if i < weather_now["cnt"] then
|
|
||||||
weather.notification_text = weather.notification_text .. "\n"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
weather.icon_path = icons_path .. "na.png"
|
|
||||||
weather.notification_text = "API/connection error or bad/not set city ID"
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
function weather.update()
|
|
||||||
local cmd = string.format(current_call, city_id, units, lang)
|
|
||||||
async.request(cmd, function(f)
|
|
||||||
<<<<<<< HEAD
|
|
||||||
j = f:read("*a")
|
|
||||||
f:close()
|
|
||||||
weather_now, pos, err = json.decode(j, 1, nil)
|
|
||||||
=======
|
|
||||||
weather_now, pos, err = json.decode(f, 1, nil)
|
|
||||||
>>>>>>> upstream/master
|
|
||||||
|
|
||||||
if not err and weather_now ~= nil and tonumber(weather_now["cod"]) == 200 then
|
|
||||||
weather.icon_path = icons_path .. weather_now["weather"][1]["icon"] .. ".png"
|
|
||||||
weather.icon:set_image(weather.icon_path)
|
|
||||||
widget = weather.widget
|
|
||||||
settings()
|
|
||||||
else
|
|
||||||
weather.widget._layout.text = " N/A " -- tries to avoid textbox bugs
|
|
||||||
weather.icon:set_image(icons_path .. "na.png")
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
weather.attach(weather.widget)
|
|
||||||
|
|
||||||
newtimer("weather-" .. city_id, timeout, weather.update)
|
|
||||||
newtimer("weather_forecast" .. city_id, timeout, weather.forecast_update)
|
|
||||||
|
|
||||||
return setmetatable(weather, { __index = weather.widget })
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable({}, { __call = function(_, ...) return worker(...) end })
|
|
Loading…
Reference in New Issue