From 341db9ce2ba80b43fc7cf509a2238ffdf5a27405 Mon Sep 17 00:00:00 2001 From: williamwanjia Date: Sun, 10 Mar 2019 15:55:57 +0100 Subject: batteryarc bug fix and improvment --- batteryarc-widget/batteryarc.lua | 83 ++++++++++++++++++++++++++++----------- fig/spaceman.jpg | Bin 0 -> 16738 bytes 2 files changed, 59 insertions(+), 24 deletions(-) create mode 100644 fig/spaceman.jpg diff --git a/batteryarc-widget/batteryarc.lua b/batteryarc-widget/batteryarc.lua index cc6fbc4..103245a 100644 --- a/batteryarc-widget/batteryarc.lua +++ b/batteryarc-widget/batteryarc.lua @@ -19,6 +19,8 @@ local HOME = os.getenv("HOME") local text = wibox.widget { id = "txt", font = "Play 6", + align = 'center', -- align the text + valign = 'center', widget = wibox.widget.textbox } @@ -48,38 +50,67 @@ watch("acpi -i", 10, local battery_info = {} local capacities = {} + + -- Change the logic of processing battery information from 'acpi -i' for s in stdout:gmatch("[^\r\n]+") do - local status, charge_str, time = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?.*') - if string.match(s, 'rate information') then - -- ignore such line - elseif status ~= nil then + local status, charge_str = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?.*') + if charge_str ~= nil then table.insert(battery_info, {status = status, charge = tonumber(charge_str)}) else local cap_str = string.match(s, '.+:.+last full capacity (%d+)') - table.insert(capacities, tonumber(cap_str)) + if cap_str ~= nil then + table.insert(capacities, tonumber(cap_str)) + end end + end - - local capacity = 0 + + -- total battery capacity + local total_capacity = 0 for i, cap in ipairs(capacities) do - capacity = capacity + cap + total_capacity = total_capacity + cap end - local charge = 0 + -- capacity charged into all batteries + local charge_cap = 0 + -- battery charge percentage 0~100 + local charge_perc = 0 + + for i, batt in ipairs(battery_info) do + -- BUG: batt.charge ranges from 0 to 100, should be divided by 100 + charge_cap = charge_cap + batt.charge/100 * capacities[i] + end + + local status + + -- new logic to determine status + status = 'Full' for i, batt in ipairs(battery_info) do - if batt.charge >= charge then - status = batt.status -- use most charged battery status - -- this is arbitrary, and maybe another metric should be used + if batt.status == 'Charging' then + status = 'Charging' + break end - - charge = charge + batt.charge * capacities[i] + if batt.status == 'Discharging' then + status = 'Discharging' + break + end end - if capacity > 0 then - charge = charge / capacity + + + if total_capacity > 0 then + charge_perc = charge_cap / total_capacity * 100 end - widget.value = charge / 100 + -- when widget.value is < 0.04, the widget shows a full circle (as widget.value=1) + -- so the charge_perc value is checked first + if charge_perc >= 5 then + widget.value = charge_perc / 100 + else + widget.value = 0.05 + end + + if status == 'Charging' then text_with_background.bg = beautiful.widget_green text_with_background.fg = beautiful.widget_black @@ -88,9 +119,13 @@ watch("acpi -i", 10, text_with_background.fg = beautiful.widget_main_color end - text.text = string.format('%d', charge) + text.text = string.format('%d', charge_perc) + + -- add variables to make it easy to change settings + local bat_high = 75 + local bat_low = 30 - if charge < 15 then + if charge_perc <= bat_low then batteryarc.colors = { beautiful.widget_red } if status ~= 'Charging' and os.difftime(os.time(), last_battery_check) > 300 then -- if 5 minutes have elapsed since the last warning @@ -98,7 +133,7 @@ watch("acpi -i", 10, show_battery_warning() end - elseif charge > 15 and charge < 40 then + elseif charge_perc > bat_low and charge_perc < bat_high then batteryarc.colors = { beautiful.widget_yellow } else batteryarc.colors = { beautiful.widget_main_color } @@ -137,11 +172,11 @@ batteryarc:connect_signal("mouse::leave", function() naughty.destroy(notificatio --[[ Show warning notification ]] function show_battery_warning() naughty.notify { - icon = HOME .. "/.config/awesome/nichosi.png", + icon = HOME .. "/.config/awesome/awesome-wm-widgets/fig/spaceman.jpg", -- new fig icon_size = 100, - text = "Huston, we have a problem", - title = "Battery is dying", - timeout = 5, + text = "Battery is dying", -- switch text and title + title = "Huston, we have a problem", + timeout = 25, -- show the warning for a longer time hover_timeout = 0.5, position = "bottom_right", bg = "#F06060", diff --git a/fig/spaceman.jpg b/fig/spaceman.jpg new file mode 100644 index 0000000..73ddaf3 Binary files /dev/null and b/fig/spaceman.jpg differ -- cgit v1.2.3 From e14c578c4838d2beee84b3fb2857f715070503b1 Mon Sep 17 00:00:00 2001 From: streetturtle Date: Sat, 23 Mar 2019 22:41:06 -0400 Subject: place battery-arc warning icon inside widget folder --- batteryarc-widget/batteryarc.lua | 3 ++- batteryarc-widget/spaceman.jpg | Bin 0 -> 16738 bytes fig/spaceman.jpg | Bin 16738 -> 0 bytes 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 batteryarc-widget/spaceman.jpg delete mode 100644 fig/spaceman.jpg diff --git a/batteryarc-widget/batteryarc.lua b/batteryarc-widget/batteryarc.lua index 103245a..cef1904 100644 --- a/batteryarc-widget/batteryarc.lua +++ b/batteryarc-widget/batteryarc.lua @@ -125,6 +125,7 @@ watch("acpi -i", 10, local bat_high = 75 local bat_low = 30 +-- if charge_perc <= bat_low then if charge_perc <= bat_low then batteryarc.colors = { beautiful.widget_red } if status ~= 'Charging' and os.difftime(os.time(), last_battery_check) > 300 then @@ -172,7 +173,7 @@ batteryarc:connect_signal("mouse::leave", function() naughty.destroy(notificatio --[[ Show warning notification ]] function show_battery_warning() naughty.notify { - icon = HOME .. "/.config/awesome/awesome-wm-widgets/fig/spaceman.jpg", -- new fig + icon = HOME .. "/.config/awesome/awesome-wm-widgets/batteryarc-widget/spaceman.jpg", icon_size = 100, text = "Battery is dying", -- switch text and title title = "Huston, we have a problem", diff --git a/batteryarc-widget/spaceman.jpg b/batteryarc-widget/spaceman.jpg new file mode 100644 index 0000000..73ddaf3 Binary files /dev/null and b/batteryarc-widget/spaceman.jpg differ diff --git a/fig/spaceman.jpg b/fig/spaceman.jpg deleted file mode 100644 index 73ddaf3..0000000 Binary files a/fig/spaceman.jpg and /dev/null differ -- cgit v1.2.3 From f7a19ff1bc9ace0e9baa3c2828ad527bda098376 Mon Sep 17 00:00:00 2001 From: Jakub Podlaha Date: Tue, 26 Mar 2019 11:18:21 +0100 Subject: destroy notification prior making new one Sometimes the `mouse::leave` signal doesn't make it on time to destroy the old notification properly. --- battery-widget/battery.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/battery-widget/battery.lua b/battery-widget/battery.lua index d59fdc6..6d9f086 100644 --- a/battery-widget/battery.lua +++ b/battery-widget/battery.lua @@ -35,6 +35,7 @@ local notification local function show_battery_status() awful.spawn.easy_async([[bash -c 'acpi']], function(stdout, _, _, _) + naughty.destroy(notification) notification = naughty.notify{ text = stdout, title = "Battery status", -- cgit v1.2.3