[bat_openbsd] Deprecate io.popen
This commit is contained in:
parent
f5060093c6
commit
268f4acfd9
|
@ -21,16 +21,17 @@ Fixed:
|
||||||
* wifi_linux, wifiiw_linux, hwmontemp_linux, hddtemp_linux
|
* wifi_linux, wifiiw_linux, hwmontemp_linux, hddtemp_linux
|
||||||
* bat_freebsd, mem_freebsd, net_freebsd, thermal_freebsd, uptime_freebsd,
|
* bat_freebsd, mem_freebsd, net_freebsd, thermal_freebsd, uptime_freebsd,
|
||||||
cpu_freebsd, cpufreq_freebsd, fanspeed_freebsd
|
cpu_freebsd, cpufreq_freebsd, fanspeed_freebsd
|
||||||
|
* bat_openbsd
|
||||||
* volume, gmail, mdir, mpd, fs
|
* volume, gmail, mdir, mpd, fs
|
||||||
- [mpd] Lua 5.3 compatibility (for real this time); also correct a typo
|
- [mpd] Lua 5.3 compatibility (for real this time); also correct a typo
|
||||||
- [pkg,weather,contrib/btc] Allow function call without Awesome
|
- [pkg,weather,contrib/btc] Allow function call without Awesome
|
||||||
- [pkg] Use more updated front-ends for Debian/Ubuntu (apt) and Fedora (dnf)
|
- [pkg] Use more updated front-ends for Debian/Ubuntu (apt) and Fedora (dnf)
|
||||||
|
|
||||||
Removed:
|
Removed:
|
||||||
|
|
||||||
- `helpers.sysctl` and `helpers.sysctl_table` were removed in favour of
|
- `helpers.sysctl` and `helpers.sysctl_table` were removed in favour of
|
||||||
`helpers.sysctl_async`.
|
`helpers.sysctl_async`.
|
||||||
|
|
||||||
|
|
||||||
# Changes in 2.3.3
|
# Changes in 2.3.3
|
||||||
|
|
||||||
Feature: Add battery widget type for OpenBSD
|
Feature: Add battery widget type for OpenBSD
|
||||||
|
|
|
@ -1,67 +1,85 @@
|
||||||
|
-- bat_openbsd.lua - provide battery information on OpenBSD
|
||||||
|
-- Copyright (C) 2019 Enric Morales
|
||||||
|
-- Copyright (C) 2019 Nguyễn Gia Phong
|
||||||
|
--
|
||||||
|
-- This file is part of Vicious.
|
||||||
|
--
|
||||||
|
-- Vicious is free software: you can redistribute it and/or modify
|
||||||
|
-- it under the terms of the GNU General Public License as
|
||||||
|
-- published by the Free Software Foundation, either version 2 of the
|
||||||
|
-- License, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- Vicious is distributed in the hope that it will be useful,
|
||||||
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
-- GNU Affero General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU Affero General Public License
|
||||||
|
-- along with Vicious. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
-- {{{ Grab environment
|
-- {{{ Grab environment
|
||||||
local setmetatable = setmetatable
|
|
||||||
local tonumber = tonumber
|
local tonumber = tonumber
|
||||||
local string = { format = string.format, gmatch = string.gmatch }
|
|
||||||
local io = { popen = io.popen }
|
|
||||||
local math = { floor = math.floor, modf = math.modf }
|
local math = { floor = math.floor, modf = math.modf }
|
||||||
|
|
||||||
|
local helpers = require"vicious.helpers"
|
||||||
|
local spawn = require"vicious.spawn"
|
||||||
-- }}}
|
-- }}}
|
||||||
|
|
||||||
local bat_openbsd = {}
|
local STATES = { [0] = "↯", -- not charging
|
||||||
|
[1] = "-", -- discharging
|
||||||
|
[2] = "!", -- critical
|
||||||
|
[3] = "+", -- charging
|
||||||
|
[4] = "N/A", -- unknown status
|
||||||
|
[255] = "N/A" } -- unimplemented by the driver
|
||||||
|
|
||||||
local function worker(format, warg)
|
return helpers.setasyncall{
|
||||||
local battery = warg or "bat0"
|
async = function (format, warg, callback)
|
||||||
local filter = string.format("hw.sensors.acpi%s", battery)
|
local filter = "hw.sensors.acpi" .. (warg or "bat0")
|
||||||
local cmd = string.format("sysctl -a | grep '^%s'", filter)
|
local pattern = filter .. ".(%S+)=(%S+)"
|
||||||
local proc = io.popen(cmd)
|
local bat_info = {}
|
||||||
|
|
||||||
local bat_info = {}
|
spawn.with_line_callback_with_shell(
|
||||||
for line in proc:lines("*l") do
|
("sysctl -a | grep '^%s'"):format(filter),
|
||||||
for key, value in string.gmatch(line, "(%S+)=(%S+)") do
|
{ stdout = function (line)
|
||||||
key = key:gsub(filter .. ".", "")
|
for key, value in line:gmatch(pattern) do
|
||||||
bat_info[key] = value
|
bat_info[key] = value
|
||||||
end
|
end
|
||||||
end
|
end,
|
||||||
|
output_done = function ()
|
||||||
|
-- current state
|
||||||
|
local state = STATES[tonumber(bat_info.raw0)]
|
||||||
|
|
||||||
-- current state
|
-- battery capacity in percent
|
||||||
local states = {[0] = "↯", -- not charging
|
local percent = tonumber(
|
||||||
[1] = "-", -- discharging
|
bat_info.watthour3 / bat_info.watthour0 * 100)
|
||||||
[2] = "!", -- critical
|
|
||||||
[3] = "+", -- charging
|
|
||||||
[4] = "N/A", -- unknown status
|
|
||||||
[255] = "N/A"} -- unimplemented by the driver
|
|
||||||
local state = states[tonumber(bat_info.raw0)]
|
|
||||||
|
|
||||||
-- battery capacity in percent
|
local time
|
||||||
local percent = tonumber(bat_info.watthour3 / bat_info.watthour0 * 100)
|
if tonumber(bat_info.power0) < 1 then
|
||||||
|
time = "∞"
|
||||||
|
else
|
||||||
|
local raw_time = bat_info.watthour3 / bat_info.power0
|
||||||
|
local hours, hour_fraction = math.modf(raw_time)
|
||||||
|
local minutes = math.floor(60 * hour_fraction)
|
||||||
|
time = ("%d:%0.2d"):format(hours, minutes)
|
||||||
|
end
|
||||||
|
|
||||||
local time
|
-- calculate wear level from (last full / design) capacity
|
||||||
if tonumber(bat_info.power0) < 1 then
|
local wear = "N/A"
|
||||||
time = "∞"
|
if bat_info.watthour0 and bat_info.watthour4 then
|
||||||
else
|
local l_full = tonumber(bat_info.watthour0)
|
||||||
local raw_time = bat_info.watthour3 / bat_info.power0
|
local design = tonumber(bat_info.watthour4)
|
||||||
local hours, hour_fraction = math.modf(raw_time)
|
wear = math.floor(l_full / design * 100)
|
||||||
local minutes = math.floor(60 * hour_fraction)
|
end
|
||||||
time = string.format("%d:%0.2d", hours, minutes)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- calculate wear level from (last full / design) capacity
|
-- dis-/charging rate as presented by battery
|
||||||
local wear = "N/A"
|
local rate = bat_info.power0
|
||||||
if bat_info.watthour0 and bat_info.watthour4 then
|
|
||||||
local l_full = tonumber(bat_info.watthour0)
|
|
||||||
local design = tonumber(bat_info.watthour4)
|
|
||||||
wear = math.floor(l_full / design * 100)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- dis-/charging rate as presented by battery
|
-- Pass the following arguments to callback function:
|
||||||
local rate = bat_info.power0
|
-- * battery state symbol (↯, -, !, + or N/A)
|
||||||
|
-- * remaining_capacity (in percent)
|
||||||
-- returns
|
-- * remaining_time, by battery
|
||||||
-- * state (high "↯", discharging "-", charging "+", N/A "⌁" }
|
-- * wear level (in percent)
|
||||||
-- * remaining_capacity (percent)
|
-- * present_rate (in Watts)
|
||||||
-- * remaining_time, by battery
|
callback{state, percent, time, wear, rate}
|
||||||
-- * wear level (percent)
|
end })
|
||||||
-- * present_rate (W)
|
end }
|
||||||
return {state, percent, time, wear, rate}
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(bat_openbsd, { __call = function(_, ...) return worker(...) end })
|
|
||||||
|
|
Loading…
Reference in New Issue