awesome, vicious.widgets.net.lua

Знающие Lua помогите. Как отредактировать net.lua файл таким образом, чтобы строка
${ppp0 up_kb}kb/s ${ppp0 down_kb}kb/s
(выводится на бар при неподключенном ppp0) заменялась на пустую. А то бар некошерно смотрится.

net.lua
---------------------------------------------------
-- Licensed under the GNU General Public License v2
--  * (c) 2010, Adrian C. <[email protected]>;
--  * (c) 2009, Lucas de Vries <[email protected]>;
---------------------------------------------------
-- {{{ Grab environment
local tonumber = tonumber
local os = { time = os.time }
local io = { lines = io.lines }
local setmetatable = setmetatable
local string = { match = string.match }
local helpers = require("vicious.helpers")
-- }}}
-- Net: provides usage statistics for all network interfaces
module("vicious.widgets.net")
-- Initialize function tables
local nets = {}
-- Variable definitions
local unit = { ["b"] = 1, ["kb"] = 1024,
    ["mb"] = 1024^2, ["gb"] = 1024^3
}
-- {{{ Net widget type
local function worker(format)
    local args = {}
    -- Get NET stats
    for line in io.lines("/proc/net/dev") do
        -- Match wmaster0 as well as rt0 (multiple leading spaces)
        name = string.match(line, "^[%s]?[%s]?[%s]?[%s]?([%w]+):")
        if name ~= nil then
            -- Received bytes, first value after the name
            local recv = tonumber(string.match(line, ":[%s]*([%d]+)"))
            -- Transmited bytes, 7 fields from end of the line
            local send = tonumber(string.match(line,
             "([%d]+)%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+%d$"))
            helpers.uformat(args, name .. " rx", recv, unit)
            helpers.uformat(args, name .. " tx", send, unit)
            if nets[name] == nil then
                -- Default values on the first run
                nets[name] = {}
               helpers.uformat(args, name .. " down", 0, unit)
               helpers.uformat(args, name .. " up",   0, unit)
                nets[name].time = os.time()
            else -- Net stats are absolute, substract our last reading
                local interval  = os.time() - nets[name].time >  0 and
                                  os.time() - nets[name].time or 1
                nets[name].time = os.time()
                local down = (recv - nets[name][1]) / interval
                local up   = (send - nets[name][2]) / interval
                helpers.uformat(args, name .. " down", down, unit)
                helpers.uformat(args, name .. " up",   up,   unit)
            end
            -- Store totals
            nets[name][1] = recv
            nets[name][2] = send
        end
    end
    return args
end
-- }}}
setmetatable(_M, { __call = function(_, ...) return worker(...) end })
shlemisto, что это за строчка, где оная находится? Не в rc.lua, случаем?
По моему надо делать проверку на наличие в /proc/net/dev интерфейса ppp0.
Любите Вы загадки, блин…
В rc.lua я только параметр передаю (ррр0)
Вилли, насколько я понимаю нужно редактировать именно net.lua , чтобы переданный параметр (в данном случае ppp0), искался в /proc/net/dev и при отсутствии оного функция uformat
 helpers.uformat(args, name .. " up",   0, unit)
возвращала пустую строчку. Но тогда придётся править helpers.lua.
Похоже нужно штатными средствами как-то возвращать пустую строчку при отсутствии интерфейса.
хех, написал )
кусок rc.lua
local netwidget = widget({ type = “textbox” })

for line in io.lines(“/proc/net/dev”) do
k = string.find(line,“ppp0”)
end
if (k) then
vicious.register(netwidget, vicious.widgets.net, “ | <span><b>U:</b></span> ${ppp0 up_kb}kb/s <span><b>D:</b></span> ${ppp0 down_kb}kb/s ”, 1)
else
netwidget.text = “ ”
end
правда, есть одна загвоздка, чтобы отобразить/скрыть этот текст на баре нужно каждый раз конфиг перезагружать. Как всё это теперь со временем связать, что бы каждые n минут проверялся /proc/net/dev?
schlemisto, мне кажется, что надо использовать функцию
vicious.unregister(widget, keep)
, в конструкции
if ... else
.
Что-то типа:
...
else
visious.unregister(netwidget, 0)
end
Вилли, это хорошо, хотя и результат тотже )
цикл
if ... else
выполняется же единожды, потому и конфиг перезагружать придётся, а while слишком для процессора накладно выйдет

надо что-то тут править, я думаю
кусок net.lua
if nets == nil then
– Default values on the first run
nets = {}
helpers.uformat(args, name .. “ down”, 0, unit)
helpers.uformat(args, name .. “ up”, 0, unit)

nets.time = os.time()
schlemisto, ну как у Вас успехи?
Вы тут смотрели?
wilful там приводил небольшой пример с использованием функции timer(timeout).
Честно сказать, виджеты не использую, т.к. пока не вижу в них особой нужды.
Как системный монитор, применяю app-admin/conky.
На мой взгляд “коньки” удобнее в настройке, плюс - грамотно написаны, спасибо автору :)
З.Ы: Админы/Модераторы форума, у меня просьба - верните мне “полноправный участник”, пожалуйста.
Не настолько я разбираюсь в Arch'е, чтобы быть “продвинутым юзером” %)
Вилли
З.Ы: Админы/Модераторы форума, у меня просьба - верните мне “полноправный участник”, пожалуйста.
Не настолько я разбираюсь в Arch'е, чтобы быть “продвинутым юзером” %)
писать меньше надо было! это теперь не изменишь, могу только забанить ;)
такие дела.
Вилли
schlemisto, ну как у Вас успехи?
Вы тут смотрели?
wilful там приводил небольшой пример с использованием функции timer(timeout).
Честно сказать, виджеты не использую, т.к. пока не вижу в них особой нужды.
Как системный монитор, применяю app-admin/conky.
На мой взгляд “коньки” удобнее в настройке, плюс - грамотно написаны, спасибо автору :)

таймер же как работает: N секунд проходит и он снова запускает тот кусок кода, который помещён в его (таймера) “тело”?

Тогда ещё одна проблемка появилась… )))
значит-с, теперь скорость перестала показываться, из - за рассинхронизации, наверное, т.е., если время в таймере и в виджете одинаковое, то они же не в абсолютно равное время стартуют, а с некоторой задержкой => таймер уже обновился, а виджет вот, только-только, и по-этому не хочет выводить инфу :(
С разным временем, понятно, что не заработает (

коньки-то вещь хорошая, да только у меня практически всё время рабочий стол закрыт окнами; а хочется, чтобы необходимая информация на виду была. А мостить на мой 10дюймовик некуда, и так сверху и снизу бары )
cucullus
Вилли
З.Ы: Админы/Модераторы форума, у меня просьба - верните мне “полноправный участник”, пожалуйста.
Не настолько я разбираюсь в Arch'е, чтобы быть “продвинутым юзером” %)
писать меньше надо было! это теперь не изменишь, могу только забанить ;)

хаха, отличный вариант Вилли? xD
 
Зарегистрироваться или войдите чтобы оставить сообщение.