From: Luca CPZ Date: Fri, 21 Dec 2018 16:19:21 +0000 (+0100) Subject: Merge branch 'master' of github.com:lcpz/lain X-Git-Url: https://git.madduck.net/etc/awesome.git/commitdiff_plain/1342ae481bc727c45a7e773ec8f815177a9299f5?hp=eb8c113fc81092e75b3270462f62a5c3736cd74b Merge branch 'master' of github.com:lcpz/lain --- diff --git a/layout/termfair.lua b/layout/termfair.lua index f57f715..e33894e 100644 --- a/layout/termfair.lua +++ b/layout/termfair.lua @@ -8,9 +8,7 @@ --]] -local math = { ceil = math.ceil, - floor = math.floor, - max = math.max } +local math = math local screen = screen local tonumber = tonumber diff --git a/util/init.lua b/util/init.lua index 8b8e719..55bfa26 100644 --- a/util/init.lua +++ b/util/init.lua @@ -158,9 +158,10 @@ end -- }}} -- On the fly useless gaps change -function util.useless_gaps_resize(thatmuch) - local scr = awful.screen.focused() - scr.selected_tag.gap = scr.selected_tag.gap + tonumber(thatmuch) +function util.useless_gaps_resize(thatmuch, s, t) + local scr = s or awful.screen.focused() + local tag = t or scr.selected_tag + tag.gap = tag.gap + tonumber(thatmuch) awful.layout.arrange(scr) end diff --git a/util/quake.lua b/util/quake.lua index 64aaca5..01891b0 100644 --- a/util/quake.lua +++ b/util/quake.lua @@ -8,13 +8,10 @@ local awful = require("awful") local capi = { client = client } - -local math = { floor = math.floor } -local string = { format = string.format } - +local math = math +local string = string local pairs = pairs local screen = screen - local setmetatable = setmetatable -- Quake-like Dropdown application spawn diff --git a/util/separators.lua b/util/separators.lua index 29d3005..465132d 100644 --- a/util/separators.lua +++ b/util/separators.lua @@ -6,8 +6,8 @@ --]] -local wibox = require("wibox") -local gears = require("gears") +local wibox = require("wibox") +local gears = require("gears") -- Lain Cairo separators util submodule -- lain.util.separators @@ -18,14 +18,22 @@ local separators = { height = 0, width = 9 } -- Right function separators.arrow_right(col1, col2) local widget = wibox.widget.base.make_widget() + widget.col1 = col1 + widget.col2 = col2 widget.fit = function(m, w, h) return separators.width, separators.height end + widget.update = function(col1, col2) + widget.col1 = col1 + widget.col2 = col2 + widget:emit_signal("widget::redraw_needed") + end + widget.draw = function(mycross, wibox, cr, width, height) - if col2 ~= "alpha" then - cr:set_source_rgb(gears.color.parse_color(col2)) + if widget.col2 ~= "alpha" then + cr:set_source_rgb(gears.color.parse_color(widget.col2)) cr:new_path() cr:move_to(0, 0) cr:line_to(width, height/2) @@ -41,8 +49,8 @@ function separators.arrow_right(col1, col2) cr:fill() end - if col1 ~= "alpha" then - cr:set_source_rgb(gears.color.parse_color(col1)) + if widget.col1 ~= "alpha" then + cr:set_source_rgb(gears.color.parse_color(widget.col1)) cr:new_path() cr:move_to(0, 0) cr:line_to(width, height/2) @@ -58,14 +66,22 @@ end -- Left function separators.arrow_left(col1, col2) local widget = wibox.widget.base.make_widget() + widget.col1 = col1 + widget.col2 = col2 widget.fit = function(m, w, h) return separators.width, separators.height end + widget.update = function(col1, col2) + widget.col1 = col1 + widget.col2 = col2 + widget:emit_signal("widget::redraw_needed") + end + widget.draw = function(mycross, wibox, cr, width, height) - if col1 ~= "alpha" then - cr:set_source_rgb(gears.color.parse_color(col1)) + if widget.col1 ~= "alpha" then + cr:set_source_rgb(gears.color.parse_color(widget.col1)) cr:new_path() cr:move_to(width, 0) cr:line_to(0, height/2) @@ -81,14 +97,14 @@ function separators.arrow_left(col1, col2) cr:fill() end - if col2 ~= "alpha" then + if widget.col2 ~= "alpha" then cr:new_path() cr:move_to(width, 0) cr:line_to(0, height/2) cr:line_to(width, height) cr:close_path() - cr:set_source_rgb(gears.color.parse_color(col2)) + cr:set_source_rgb(gears.color.parse_color(widget.col2)) cr:fill() end end diff --git a/widget/alsa.lua b/widget/alsa.lua index 2d4891d..3b6c6d6 100644 --- a/widget/alsa.lua +++ b/widget/alsa.lua @@ -9,8 +9,7 @@ local helpers = require("lain.helpers") local shell = require("awful.util").shell local wibox = require("wibox") -local string = { match = string.match, - format = string.format } +local string = string -- ALSA volume -- lain.widget.alsa diff --git a/widget/alsabar.lua b/widget/alsabar.lua index 557e97b..9b9f4b9 100644 --- a/widget/alsabar.lua +++ b/widget/alsabar.lua @@ -6,15 +6,14 @@ --]] -local helpers = require("lain.helpers") -local awful = require("awful") -local naughty = require("naughty") -local wibox = require("wibox") -local math = { modf = math.modf } -local string = { format = string.format, - match = string.match, - rep = string.rep } -local type, tonumber = type, tonumber +local helpers = require("lain.helpers") +local awful = require("awful") +local naughty = require("naughty") +local wibox = require("wibox") +local math = math +local string = string +local type = type +local tonumber = tonumber -- ALSA volume bar -- lain.widget.alsabar @@ -36,6 +35,8 @@ local function factory(args) local settings = args.settings or function() end local width = args.width or 63 local height = args.height or 1 + local margins = args.margins or 1 + local paddings = args.paddings or 1 local ticks = args.ticks or false local ticks_size = args.ticks_size or 7 @@ -59,12 +60,12 @@ local function factory(args) end alsabar.bar = wibox.widget { - forced_height = height, - forced_width = width, color = alsabar.colors.unmute, background_color = alsabar.colors.background, - margins = 1, - paddings = 1, + forced_height = height, + forced_width = width, + margins = margins, + paddings = margins, ticks = ticks, ticks_size = ticks_size, widget = wibox.widget.progressbar diff --git a/widget/bat.lua b/widget/bat.lua index b654948..5a301b5 100644 --- a/widget/bat.lua +++ b/widget/bat.lua @@ -6,14 +6,14 @@ --]] -local helpers = require("lain.helpers") -local fs = require("gears.filesystem") -local naughty = require("naughty") -local wibox = require("wibox") -local math = math -local string = string -local ipairs = ipairs -local tonumber = tonumber +local helpers = require("lain.helpers") +local fs = require("gears.filesystem") +local naughty = require("naughty") +local wibox = require("wibox") +local math = math +local string = string +local ipairs = ipairs +local tonumber = tonumber -- Battery infos -- lain.widget.bat diff --git a/widget/cal.lua b/widget/cal.lua index 326dc00..47e91a9 100644 --- a/widget/cal.lua +++ b/widget/cal.lua @@ -47,6 +47,7 @@ local function factory(args) strx = string.format("%s%s", string.rep(" ", 3 - tostring(x):len()), strx) notifytable[#notifytable+1] = string.format("%-4s%s", strx, (x+st_day)%7==0 and x ~= mth_days and "\n" or "") end + if string.len(cal.icons or "") > 0 and today then cal.icon = cal.icons .. today .. ".png" end cal.month, cal.year = d.month, d.year return notifytable end @@ -78,7 +79,7 @@ local function factory(args) cal.notification = nil end - function cal.show(timeout, month, year) + function cal.show(timeout, month, year, scr) cal.notification_preset.text = tconcat(cal.build(month, year)) if cal.three then @@ -94,6 +95,7 @@ local function factory(args) cal.hide() cal.notification = naughty.notify { preset = cal.notification_preset, + screen = cal.followtag and awful.screen.focused() or scr or 1, icon = cal.icon, timeout = timeout or cal.notification_preset.timeout or 5 } diff --git a/widget/contrib/moc.lua b/widget/contrib/moc.lua index 027cec3..f429c77 100644 --- a/widget/contrib/moc.lua +++ b/widget/contrib/moc.lua @@ -11,9 +11,8 @@ local focused = require("awful.screen").focused local escape_f = require("awful.util").escape local naughty = require("naughty") local wibox = require("wibox") -local os = { getenv = os.getenv } -local string = { format = string.format, - gmatch = string.gmatch } +local os = os +local string = string -- MOC audio player -- lain.widget.contrib.moc diff --git a/widget/contrib/redshift.lua b/widget/contrib/redshift.lua index 7b54611..d0e5eed 100644 --- a/widget/contrib/redshift.lua +++ b/widget/contrib/redshift.lua @@ -1,6 +1,7 @@ --[[ Licensed under GNU General Public License v2 + * (c) 2017, Luca CPZ * (c) 2014, blueluke --]] diff --git a/widget/contrib/task.lua b/widget/contrib/task.lua index 7e1f3d8..536e006 100644 --- a/widget/contrib/task.lua +++ b/widget/contrib/task.lua @@ -10,7 +10,7 @@ local markup = require("lain.util").markup local awful = require("awful") local naughty = require("naughty") local mouse = mouse -local string = { format = string.format, gsub = string.gsub } +local string = string -- Taskwarrior notification -- lain.widget.contrib.task @@ -23,11 +23,7 @@ function task.hide() end function task.show(scr) - if task.followtag then - task.notification_preset.screen = awful.screen.focused() - elseif scr then - task.notification_preset.screen = scr - end + 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 @@ -44,12 +40,12 @@ function task.show(scr) 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*$", ""))) - }) + 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 diff --git a/widget/contrib/tp_smapi.lua b/widget/contrib/tp_smapi.lua new file mode 100644 index 0000000..4f43e44 --- /dev/null +++ b/widget/contrib/tp_smapi.lua @@ -0,0 +1,146 @@ +--[[ + + Licensed under GNU General Public License v2 + * (c) 2018, Luca CPZ + * (c) 2013, Conor Heine + +--]] + +local helpers = require("lain.helpers") +local focused = require("awful.screen").focused +local gears = require("gears") +local naughty = require("naughty") +local wibox = require("wibox") +local string = string + +-- ThinkPad battery infos and widget creator +-- http://www.thinkwiki.org/wiki/Tp_smapi +-- lain.widget.contrib.tp_smapi + +local function factory(apipath) + local tp_smapi = { + path = apipath or "/sys/devices/platform/smapi" + } + + function tp_smapi.get(batid, feature) + return helpers.first_line(string.format("%s/%s/%s", tp_smapi.path, batid or "BAT0", feature or "")) + end + + function tp_smapi.installed(batid) + return tp_smapi.get(batid, "installed") == "1" + end + + function tp_smapi.status(batid) + return tp_smapi.get(batid, "state") + end + + function tp_smapi.percentage(batid) + return tp_smapi.get(batid, "remaining_percent") + end + + -- either running or charging time + function tp_smapi.time(batid) + local status = tp_smapi.status(batid) + local mins_left = tp_smapi.get(batid, string.match(string.lower(status), "discharging") and "remaining_running_time" or "remaining_charging_time") + if not string.find(mins_left, "^%d+") then return "N/A" end + return string.format("%02d:%02d", math.floor(mins_left / 60), mins_left % 60) -- HH:mm + end + + function tp_smapi.hide() + if not tp_smapi.notification then return end + naughty.destroy(tp_smapi.notification) + tp_smapi.notification = nil + end + + function tp_smapi.show(batid, seconds, scr) + if not tp_smapi.installed(batid) then return end + + local mfgr = tp_smapi.get(batid, "manufacturer") or "no_mfgr" + local model = tp_smapi.get(batid, "model") or "no_model" + local chem = tp_smapi.get(batid, "chemistry") or "no_chem" + local status = tp_smapi.get(batid, "state") + local time = tp_smapi.time(batid) + local msg = "" + + if status and status ~= "idle" then + msg = string.format("[%s] %s %s", status, time ~= "N/A" and time or "unknown remaining time", + string.lower(status):gsub(" ", ""):gsub("\n", "") == "charging" and " until charged" or " remaining") + else + msg = "On AC power" + end + + tp_smapi.hide() + tp_smapi.notification = naughty.notify { + title = string.format("%s: %s %s (%s)", batid, mfgr, model, chem), + text = msg, + timeout = seconds or 0, + screen = scr or focused() + } + end + + function tp_smapi.create_widget(args) + local args = args or {} + local pspath = args.pspath or "/sys/class/power_supply/" + local batteries = args.batteries or (args.battery and {args.battery}) or {} + local timeout = args.timeout or 30 + local settings = args.settings or function() end + + if #batteries == 0 then + helpers.line_callback("ls -1 " .. pspath, function(line) + local bstr = string.match(line, "BAT%w+") + if bstr then batteries[#batteries + 1] = bstr end + end) + end + + local all_batteries_installed = true + + for i, battery in ipairs(batteries) do + if not tp_smapi.installed(battery) then + naughty.notify { + preset = naughty.config.critical, + title = "tp_smapi: error while creating widget", + text = string.format("battery %s is not installed", battery) + } + all_batteries_installed = false + break + end + end + + if not all_batteries_installed then return end + + tpbat = { + batteries = batteries, + widget = args.widget or wibox.widget.textbox() + } + + function tpbat.update() + tpbat_now = { + n_status = {}, + n_perc = {}, + n_time = {}, + status = "N/A" + } + + for i = 1, #batteries do + tpbat_now.n_status[i] = tp_smapi.status(batteries[i]) or "N/A" + tpbat_now.n_perc[i] = tp_smapi.percentage(batteries[i]) + tpbat_now.n_time[i] = tp_smapi.time(batteries[i]) or "N/A" + + if not tpbat_now.n_status[i]:lower():match("full") then + tpbat_now.status = tpbat_now.n_status[i] + end + end + + widget = tpbat.widget -- backwards compatibility + settings() + end + + helpers.newtimer("thinkpad-batteries", timeout, tpbat.update) + + return tpbat + end + + return tp_smapi +end + +return factory diff --git a/widget/contrib/tpbat/init.lua b/widget/contrib/tpbat/init.lua deleted file mode 100644 index c62acd1..0000000 --- a/widget/contrib/tpbat/init.lua +++ /dev/null @@ -1,163 +0,0 @@ ---[[ - - tpbat.lua - Battery status widget for ThinkPad laptops that use SMAPI - lain.widget.contrib.tpbat - - More on tp_smapi: http://www.thinkwiki.org/wiki/Tp_smapi - - Licensed under GNU General Public License v2 - * (c) 2013, Conor Heine - * (c) 2013, Luca CPZ - * (c) 2010-2012, Peter Hofmann - ---]] - -local debug = { getinfo = debug.getinfo } -local newtimer = require("lain.helpers").newtimer -local first_line = require("lain.helpers").first_line -local naughty = require("naughty") -local wibox = require("wibox") -local string = { format = string.format } -local math = { floor = math.floor } -local tostring = tostring -local setmetatable = setmetatable -package.path = debug.getinfo(1,"S").source:match[[^@?(.*[\/])[^\/]-$]] .. "?.lua;" .. package.path -local smapi = require("smapi") - --- ThinkPad SMAPI-enabled battery info widget --- lain.widget.contrib.tpbat -local tpbat = {} - -function tpbat.hide() - if not tpbat.notification then return end - naughty.destroy(tpbat.notification) - tpbat.notification = nil -end - -function tpbat.show(t_out) - tpbat.hide() - - local bat = tpbat.bat - - if bat == nil or not bat:installed() then return end - - local t_out = t_out or 0 - local mfgr = bat:get('manufacturer') or "no_mfgr" - local model = bat:get('model') or "no_model" - local chem = bat:get('chemistry') or "no_chem" - local status = bat:get('state') or "nil" - local time = bat:remaining_time() - local msg = "\t" - - if status ~= "idle" and status ~= "nil" then - if time == "N/A" then - msg = "...Calculating time remaining..." - else - msg = time .. (status == "charging" and " until charged" or " remaining") - end - else - msg = "On AC Power" - end - - local str = string.format("%s : %s %s (%s)\n", bat.name, mfgr, model, chem) - .. string.format("\n%s \t\t\t %s", status:upper(), msg) - - tpbat.notification = naughty.notify({ - text = str, - timeout = t_out, - screen = client.focus and client.focus.screen or 1 - }) -end - -function tpbat.register(args) - local args = args or {} - local timeout = args.timeout or 30 - local battery = args.battery or "BAT0" - local bat_low_perc = args.bat_low_perc or 15 - local bat_critical_perc = args.bat_critical_perc or 5 - local settings = args.settings or function() end - - tpbat.bat = smapi:battery(battery) -- Create a new battery - local bat = tpbat.bat - - tpbat.widget = wibox.widget.textbox() - - bat_notification_low_preset = { - title = "Battery low", - text = "Plug the cable!", - timeout = 15, - fg = "#202020", - bg = "#CDCDCD" - } - - bat_notification_critical_preset = { - title = "Battery exhausted", - text = "Shutdown imminent", - timeout = 15, - fg = "#000000", - bg = "#FFFFFF" - } - - if bat:get('state') == nil - then - local n = naughty.notify({ - preset = bat_notification_low_preset, - title = "SMAPI Battery Warning: Unable to read battery state!", - text = "This widget is intended for ThinkPads. Is tp_smapi installed? Check your configs & paths.", - screen = client.focus and client.focus.screen or 1 - }) - end - - function tpbat.update() - bat_now = { - status = "Not present", - perc = "N/A", - time = "N/A", - watt = "N/A" - } - - if bat:installed() - then - bat_now.status = bat:status() or "N/A" - bat_now.perc = bat:percent() - bat_now.time = bat:remaining_time() - -- bat_now.watt = string.format("%.2fW", (VOLTS * AMPS) / 1e12) - - -- notifications for low and critical states (when discharging) - if bat_now.status == "discharging" - then - if bat_now.perc <= bat_critical_perc - then - tpbat.id = naughty.notify({ - preset = bat_notification_critical_preset, - replaces_id = tpbat.id, - screen = client.focus and client.focus.screen or 1 - }).id - elseif bat_now.perc <= bat_low_perc - then - tpbat.id = naughty.notify({ - preset = bat_notification_low_preset, - replaces_id = tpbat.id, - screen = client.focus and client.focus.screen or 1 - }).id - end - end - - bat_now.perc = tostring(bat_now.perc) - end - - widget = tpbat.widget - - settings() - end - - newtimer("tpbat-" .. bat.name, timeout, tpbat.update) - - widget:connect_signal('mouse::enter', function () tpbat.show() end) - widget:connect_signal('mouse::leave', function () tpbat.hide() end) - - return tpbat -end - -return setmetatable(tpbat, { __call = function(_, ...) return tpbat.register(...) end }) diff --git a/widget/contrib/tpbat/smapi.lua b/widget/contrib/tpbat/smapi.lua deleted file mode 100644 index a8867e4..0000000 --- a/widget/contrib/tpbat/smapi.lua +++ /dev/null @@ -1,98 +0,0 @@ ---[[ - - smapi.lua - Interface with thinkpad battery information - - Licensed under GNU General Public License v2 - * (c) 2013, Conor Heine - ---]] - -local first_line = require("lain.helpers").first_line - -local string = { format = string.format } -local tonumber = tonumber -local setmetatable = setmetatable - -local smapi = {} -local apipath = "/sys/devices/platform/smapi" - --- Most are readable values, but some can be written to (not implemented, yet?) -local readable = { - barcoding = true, - charging_max_current = true, - charging_max_voltage = true, - chemistry = true, - current_avg = true, - current_now = true, - cycle_count = true, - design_capacity = true, - design_voltage = true, - dump = true, - first_use_date = true, - force_discharge = false, - group0_voltage = true, - group1_voltage = true, - group2_voltage = true, - group3_voltage = true, - inhibit_charge_minutes = false, - installed = true, - last_full_capacity = true, - manufacture_date = true, - manufacturer = true, - model = true, - power_avg = true, - power_now = true, - remaining_capacity = true, - remaining_charging_time = true, - remaining_percent = true, - remaining_percent_error = true, - remaining_running_time = true, - remaining_running_time_now = true, - serial = true, - start_charge_thresh = false, - state = true, - stop_charge_thresh = false, - temperature = true, - voltage = true -} - -function smapi:battery(name) - local bat = {} - - bat.name = name - bat.path = apipath .. "/" .. name - - function bat:get(item) - return self.path ~= nil and readable[item] and first_line(self.path .. "/" .. item) or nil - end - - function bat:installed() - return self:get("installed") == "1" - end - - function bat:status() - return self:get('state') - end - - -- Remaining time can either be time until battery dies or time until charging completes - function bat:remaining_time() - local time_val = bat_now.status == 'discharging' and 'remaining_running_time' or 'remaining_charging_time' - local mins_left = self:get(time_val) - - if not mins_left:find("^%d+") then return "N/A" end - - local hrs = math.floor(mins_left / 60) - local min = mins_left % 60 - - return string.format("%02d:%02d", hrs, min) - end - - function bat:percent() - return tonumber(self:get("remaining_percent")) - end - - return setmetatable(bat, {__metatable = false, __newindex = false}) -end - -return smapi diff --git a/widget/cpu.lua b/widget/cpu.lua index 6c6e77a..81638c2 100644 --- a/widget/cpu.lua +++ b/widget/cpu.lua @@ -8,9 +8,8 @@ local helpers = require("lain.helpers") local wibox = require("wibox") -local math = { ceil = math.ceil } -local string = { format = string.format, - gmatch = string.gmatch } +local math = math +local string = string local tostring = tostring -- CPU usage diff --git a/widget/imap.lua b/widget/imap.lua index 7e83d36..b3d9dc7 100644 --- a/widget/imap.lua +++ b/widget/imap.lua @@ -17,63 +17,75 @@ local tonumber = tonumber -- lain.widget.imap local function factory(args) - local imap = { widget = wibox.widget.textbox() } - 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 followtag = args.followtag or false - local notify = args.notify or "on" - local settings = args.settings or function() end + local imap = { widget = wibox.widget.textbox() } + 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 pwdtimeout = args.pwdtimeout or 10 + local is_plain = args.is_plain or false + local followtag = args.followtag or false + local notify = args.notify or "on" + local settings = args.settings or function() end local head_command = "curl --connect-timeout 3 -fsm 3" - local request = "-X 'SEARCH (UNSEEN)'" + local request = "-X 'STATUS INBOX (MESSAGES RECENT UNSEEN)'" if not server or not mail or not password then return end + mail_notification_preset = { + icon = helpers.icons_dir .. "mail.png", + position = "top_left" + } + helpers.set_map(mail, 0) if not is_plain then if type(password) == "string" or type(password) == "table" then helpers.async(password, function(f) password = f:gsub("\n", "") end) elseif type(password) == "function" then - local p = password() + imap.pwdtimer = helpers.newtimer(mail .. "-password", pwdtimeout, function() + local retrieved_password, try_again = password() + if not try_again then + imap.pwdtimer:stop() -- stop trying to retrieve + password = retrieved_password or "" -- failsafe + end + end, true, true) end end - function update() - mail_notification_preset = { - icon = helpers.icons_dir .. "mail.png", - position = "top_left" - } - - if followtag then - mail_notification_preset.screen = awful.screen.focused() - end + function imap.update() + -- do not update if the password has not been retrieved yet + if type(password) ~= "string" then return end - local curl = string.format("%s --url imaps://%s:%s/INBOX -u %s:%q %s -k", + local curl = string.format("%s --url imaps://%s:%s/INBOX -u %s:'%s' %s -k", head_command, server, port, mail, password, request) helpers.async(curl, function(f) - mailcount = tonumber(f:match("UNSEEN (%d+)")) + imap_now = { ["MESSAGES"] = 0, ["RECENT"] = 0, ["UNSEEN"] = 0 } + + for s,d in f:gmatch("(%w+)%s+(%d+)") do imap_now[s] = tonumber(d) end + mailcount = imap_now["UNSEEN"] -- backwards compatibility widget = imap.widget + settings() if notify == "on" and mailcount and mailcount >= 1 and mailcount > helpers.get_map(mail) then - local nt = mail .. " has " .. mailcount .. " new message" - if mailcount >= 1 then nt = nt .. "s" end - naughty.notify { preset = mail_notification_preset, text = nt } + if followtag then mail_notification_preset.screen = awful.screen.focused() end + naughty.notify { + preset = mail_notification_preset, + text = string.format("%s has %d new message%s", mail, mailcount, mailcount == 1 and "" or "s") + } end - helpers.set_map(mail, mailcount) + helpers.set_map(mail, imap_now["UNSEEN"]) end) end - imap.timer = helpers.newtimer(mail, timeout, update, true, true) + imap.timer = helpers.newtimer(mail, timeout, imap.update, true, true) return imap end diff --git a/widget/mpd.lua b/widget/mpd.lua index ff45179..01f28e6 100644 --- a/widget/mpd.lua +++ b/widget/mpd.lua @@ -6,16 +6,14 @@ --]] -local helpers = require("lain.helpers") -local shell = require("awful.util").shell -local escape_f = require("awful.util").escape -local focused = require("awful.screen").focused -local naughty = require("naughty") -local wibox = require("wibox") -local os = { getenv = os.getenv } -local string = { format = string.format, - gmatch = string.gmatch, - match = string.match } +local helpers = require("lain.helpers") +local shell = require("awful.util").shell +local escape_f = require("awful.util").escape +local focused = require("awful.screen").focused +local naughty = require("naughty") +local wibox = require("wibox") +local os = os +local string = string -- MPD infos -- lain.widget.mpd diff --git a/widget/net.lua b/widget/net.lua index 987f047..805b577 100644 --- a/widget/net.lua +++ b/widget/net.lua @@ -9,7 +9,7 @@ local helpers = require("lain.helpers") local naughty = require("naughty") local wibox = require("wibox") -local string = { format = string.format, match = string.match } +local string = string -- Network infos -- lain.widget.net diff --git a/widget/pulse.lua b/widget/pulse.lua index d37e83a..f63fe55 100644 --- a/widget/pulse.lua +++ b/widget/pulse.lua @@ -8,10 +8,8 @@ local helpers = require("lain.helpers") local shell = require("awful.util").shell local wibox = require("wibox") -local string = { gmatch = string.gmatch, - match = string.match, - format = string.format } -local type = type +local string = string +local type = type -- PulseAudio volume -- lain.widget.pulse diff --git a/widget/pulsebar.lua b/widget/pulsebar.lua index 158e639..317468f 100644 --- a/widget/pulsebar.lua +++ b/widget/pulsebar.lua @@ -6,16 +6,14 @@ --]] -local helpers = require("lain.helpers") -local awful = require("awful") -local naughty = require("naughty") -local wibox = require("wibox") -local math = { modf = math.modf } -local string = { format = string.format, - match = string.match, - gmatch = string.gmatch, - rep = string.rep } -local type, tonumber = type, tonumber +local helpers = require("lain.helpers") +local awful = require("awful") +local naughty = require("naughty") +local wibox = require("wibox") +local math = math +local string = string +local type = type +local tonumber = tonumber -- PulseAudio volume bar -- lain.widget.pulsebar @@ -37,7 +35,9 @@ local function factory(args) 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 height = args.height or 1 + local margins = args.margins or 1 + local paddings = args.paddings or 1 local ticks = args.ticks or false local ticks_size = args.ticks_size or 7 @@ -54,12 +54,12 @@ local function factory(args) end pulsebar.bar = wibox.widget { - forced_height = height, - forced_width = width, color = pulsebar.colors.unmute, background_color = pulsebar.colors.background, - margins = 1, - paddings = 1, + forced_height = height, + forced_width = width, + margins = margins, + paddings = paddings, ticks = ticks, ticks_size = ticks_size, widget = wibox.widget.progressbar, diff --git a/widget/weather.lua b/widget/weather.lua index a9b886a..f35ca68 100644 --- a/widget/weather.lua +++ b/widget/weather.lua @@ -10,8 +10,10 @@ local json = require("lain.util").dkjson local focused = require("awful.screen").focused local naughty = require("naughty") local wibox = require("wibox") - -local math, os, string, tonumber = math, os, string, tonumber +local math = math +local os = os +local string = string +local tonumber = tonumber -- OpenWeatherMap -- current weather and X-days forecast diff --git a/wiki b/wiki index 1acb69e..11ea6b6 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 1acb69eb3cf431b9102978c6117144980e8a2939 +Subproject commit 11ea6b6bc6661396e6d29f362f94c5561a94eb44