From 84313cc876bce8b346ca83934de57b50488ab8cd Mon Sep 17 00:00:00 2001 From: copycat-killer Date: Sun, 8 May 2016 19:57:21 +0200 Subject: [PATCH] #195: magnify_client can now behave like magnifier layout --- util/init.lua | 39 +++++++++++--------- widgets/net.lua | 96 +++++++++++++++++++++++++++++++------------------ 2 files changed, 83 insertions(+), 52 deletions(-) diff --git a/util/init.lua b/util/init.lua index ac3afec..70d8e52 100644 --- a/util/init.lua +++ b/util/init.lua @@ -74,32 +74,37 @@ function util.menu_clients_current_tags(menu, args) end -- Magnify a client: Set it to "float" and resize it. +local magnified_client = nil function util.magnify_client(c) - if not awful.client.floating.get(c) then - awful.client.floating.set(c, true) - - local mg = screen[mouse.screen].geometry - local tag = awful.tag.selected(mouse.screen) - local mwfact = awful.tag.getmwfact(tag) - local g = {} - g.width = math.sqrt(mwfact) * mg.width - g.height = math.sqrt(mwfact) * mg.height - g.x = mg.x + (mg.width - g.width) / 2 - g.y = mg.y + (mg.height - g.height) / 2 - c:geometry(g) + if c and not awful.client.floating.get(c) then + util.mc(c) + magnified_client = c else awful.client.floating.set(c, false) + magnified_client = nil end end +-- https://github.com/copycat-killer/lain/issues/195 +function util.mc(c) + c = c or magnified_client + if not c then return end + awful.client.floating.set(c, true) + local mg = screen[mouse.screen].geometry + local tag = awful.tag.selected(mouse.screen) + local mwfact = awful.tag.getmwfact(tag) + local g = {} + g.width = math.sqrt(mwfact) * mg.width + g.height = math.sqrt(mwfact) * mg.height + g.x = mg.x + (mg.width - g.width) / 2 + g.y = mg.y + (mg.height - g.height) / 2 + c:geometry(g) +end + -- Read the nice value of pid from /proc. local function get_nice_value(pid) local n = first_line('/proc/' .. pid .. '/stat') - if n == nil - then - -- This should not happen. But I don't want to crash, either. - return 0 - end + if not n then return 0 end -- Remove pid and tcomm. This is necessary because tcomm may contain -- nasty stuff such as whitespace or additional parentheses... diff --git a/widgets/net.lua b/widgets/net.lua index da2130f..ed1cf4c 100644 --- a/widgets/net.lua +++ b/widgets/net.lua @@ -23,11 +23,11 @@ local setmetatable = setmetatable local function worker(args) local net = { last_t = 0, last_r = 0 } - function net.get_device() + function net.get_first_device() local ws = helpers.read_pipe("ip link show | cut -d' ' -f2,9") ws = ws:match("%w+: UP") or ws:match("ppp%w+: UNKNOWN") - if ws then return ws:match("(%w+):") - else return "network off" end + if ws then return { ws:match("(%w+):") } + else return {} end end local args = args or {} @@ -36,53 +36,79 @@ local function worker(args) local notify = args.notify or "on" local screen = args.screen or 1 local settings = args.settings or function() end - local iface = args.iface or net.get_device() + local iface = args.iface or net.get_first_device() net.widget = wibox.widget.textbox('') - helpers.set_map(iface, true) + -- Compatibility with old API where iface was a string corresponding to 1 interface + if type(iface) == "string" then + iftable = {iface} + else + iftable = iface + end + + -- Mark all devices as initially online/active + for i, dev in ipairs(iftable) do + helpers.set_map(dev, true) + end function update() - net_now = {} + -- These are the totals over all specified interfaces + net_now = { + sent = 0, + received = 0 + } + + -- Total bytes transfered + local total_t = 0 + local total_r = 0 + + for i, dev in ipairs(iftable) do + local dev_now = {} + local dev_before = net_now[dev] or net + + dev_now.carrier = helpers.first_line(string.format('/sys/class/net/%s/carrier', dev)) or '0' + dev_now.state = helpers.first_line(string.format('/sys/class/net/%s/operstate', dev)) or 'down' + + local now_t = tonumber(helpers.first_line(string.format('/sys/class/net/%s/statistics/tx_bytes', dev)) or 0) + local now_r = tonumber(helpers.first_line(string.format('/sys/class/net/%s/statistics/rx_bytes', dev)) or 0) + + if now_t ~= dev_before.last_t or now_r ~= dev_before.last_r then + dev_now.sent = (now_t - (dev_before.last_t or 0)) / timeout / units + net_now.sent = net_now.sent + dev_now.sent + dev_now.sent = string.gsub(string.format('%.1f', dev_now.sent), ',', '.') + dev_now.received = (now_r - (dev_before.last_r or 0)) / timeout / units + net_now.received = net_now.received + dev_now.received + dev_now.received = string.gsub(string.format('%.1f', dev_now.received), ',', '.') + end - if iface == "" or string.match(iface, "network off") - then - iface = net.get_device() - end + total_t = total_t + now_t + total_r = total_r + now_r - net_now.carrier = helpers.first_line(string.format('/sys/class/net/%s/carrier', iface)) or '0' - net_now.state = helpers.first_line(string.format('/sys/class/net/%s/operstate', iface)) or 'down' + net_now[dev] = dev_now - local now_t = helpers.first_line(string.format('/sys/class/net/%s/statistics/tx_bytes', iface)) or 0 - local now_r = helpers.first_line(string.format('/sys/class/net/%s/statistics/rx_bytes', iface)) or 0 + if string.match(dev_now.carrier, "0") and notify == "on" and helpers.get_map(dev) then + naughty.notify({ + title = dev, + text = "no carrier", + icon = helpers.icons_dir .. "no_net.png", + screen = screen + }) + helpers.set_map(dev, false) + else + helpers.set_map(dev, true) + end + end - if now_t ~= net.last_t or now_r ~= net.last_r then - net_now.sent = (now_t - net.last_t) / timeout / units + if total_t ~= net.last_t or total_r ~= net.last_r then 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 - end - - if not string.match(net_now.carrier, "1") and notify == "on" - then - if helpers.get_map(iface) - then - naughty.notify({ - title = iface, - text = "no carrier", - icon = helpers.icons_dir .. "no_net.png", - screen = screen - }) - helpers.set_map(iface, false) - end - else - helpers.set_map(iface, true) + net.last_t = total_t + net.last_r = total_r end end -- 2.39.2