diff options
author | Adrian C. (anrxc) <anrxc@sysphere.org> | 2009-07-29 17:59:32 +0200 |
---|---|---|
committer | Adrian C. (anrxc) <anrxc@sysphere.org> | 2009-07-29 17:59:32 +0200 |
commit | 98e26ee0436822b00d4a6e707d86cf33d24bc00f (patch) | |
tree | a2a77a85453835d6235b9a4ee8a4044433c37151 /init.lua | |
download | vicious-legacy-98e26ee0436822b00d4a6e707d86cf33d24bc00f.tar.xz |
Import of vicious source tree.v1.0.0
Vicious is a modular widget library for 'awesome' window manager,
derived from the 'Wicked' widget library.
Summary of changes:
* Original wicked code modularized
* Widgets ported from Wicked:
- CPU, MEM, FS, NET, Date, Uptime, MPD
* CPU widget rewritten, uses pattern matching
* MEM widget rewritten, uses pattern matching
- Swap widget merged with MEM widget type
* FS widget rewritten, uses pattern matching
- Also fixed padding in the process
* NET widget rewritten, uses pattern matching
* MPD widget rewritten, a bit more versatile
* Removed deprecated helper functions
* Widgets written for Vicious:
- Thermal, Battery, Mbox, OrgMode, Volume, Entropy,
Disk I/O, System Load, Wireless, Pacman, Maildir
Diffstat (limited to 'init.lua')
-rw-r--r-- | init.lua | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..8c74560 --- /dev/null +++ b/init.lua @@ -0,0 +1,274 @@ +---------------------------------------------------------------- +-- Vicious widgets for the awesome window manager +-- * FAQ: http://sysphere.org/~anrxc/local/scr/sources/vicious +---------------------------------------------------------------- +-- Licensed under the GNU General Public License version 2 +-- * Copyright (C) 2009 Adrian C. <anrxc_sysphere_org> +-- +-- To view a human-readable summary of the license, visit: +-- * http://creativecommons.org/licenses/GPL/2.0/ +---------------------------------------------------------------- +-- Derived from Wicked, by Lucas de Vries <lucas_glacicle_com> +-- * Wicked is licensed under the WTFPL v2 +---------------------------------------------------------------- + +-- {{{ Grab environment +require("awful") +require("vicious.helpers") + +local type = type +local pairs = pairs +local awful = awful +local tonumber = tonumber +local os = { time = os.time } +local table = { + insert = table.insert, + remove = table.remove +} + +-- Grab C API +local capi = { + hooks = hooks, + widget = widget, + awesome = awesome, +} +-- }}} + + +-- {{{ Configure widgets +require("vicious.cpu") +require("vicious.thermal") +require("vicious.load") +require("vicious.uptime") +require("vicious.bat") +require("vicious.mem") +require("vicious.fs") +require("vicious.dio") +require("vicious.net") +require("vicious.wifi") +require("vicious.mbox") +require("vicious.mdir") +require("vicious.entropy") +require("vicious.org") +require("vicious.pacman") +require("vicious.mpd") +require("vicious.volume") +require("vicious.date") +-- }}} + +-- Vicious: widgets for the awesome window manager +module("vicious") + + +-- {{{ Initialise variables +local registered = {} +local widget_cache = {} + +-- Initialise the function table +widgets = {} +-- }}} + +-- {{{ Widget types +for w, i in pairs(_M) do + -- Ensure we don't call ourselves + if i and i ~= _M and type(i) == "table" then + -- Ignore the function table and helpers + if w ~= "widgets" and w ~= "helpers" then + -- Place functions in the namespace table + widgets[w] = i.worker + -- Enable caching for all widget types + widget_cache[i.worker] = {} + end + end +end +-- }}} + +-- {{{ Main functions +-- {{{ Register widget +function register(widget, wtype, format, timer, field, padd) + local reg = {} + local widget = widget + + -- Set properties + reg.type = wtype + reg.format = format + reg.timer = timer + reg.field = field + reg.padd = padd + reg.widget = widget + + -- Update function + reg.update = function () + update(widget, reg) + end + + -- Default to timer=1 + if reg.timer == nil then + reg.timer = 1 + end + + -- Allow using a string widget type + if type(reg.type) == "string" then + reg.type = widgets[reg.type] + end + + -- Register reg object + regregister(reg) + + -- Return reg object for reuse + return reg +end +-- }}} + +-- {{{ Register from reg object +function regregister(reg) + if not reg.running then + -- Put widget in table + if registered[reg.widget] == nil then + registered[reg.widget] = {} + table.insert(registered[reg.widget], reg) + else + already = false + + for w, i in pairs(registered) do + if w == reg.widget then + for k, v in pairs(i) do + if v == reg then + already = true + break + end + end + + if already then + break + end + end + end + + if not already then + table.insert(registered[reg.widget], reg) + end + end + + -- Start timer + if reg.timer > 0 then + awful.hooks.timer.register(reg.timer, reg.update) + end + + -- Initial update + reg.update() + + -- Set running + reg.running = true + end +end +-- }}} + +-- {{{ Unregister widget +function unregister(widget, keep, reg) + if reg == nil then + for w, i in pairs(registered) do + if w == widget then + for k, v in pairs(i) do + reg = unregister(w, keep, v) + end + end + end + + return reg + end + + if not keep then + for w, i in pairs(registered) do + if w == widget then + for k, v in pairs(i) do + if v == reg then + table.remove(registered[w], k) + end + end + end + end + end + + awful.hooks.timer.unregister(reg.update) + reg.running = false + + return reg +end +-- }}} + +-- {{{ Suspend vicious, halt all widget updates +function suspend() + for w, i in pairs(registered) do + for k, v in pairs(i) do + unregister(w, true, v) + end + end +end +-- }}} + +-- {{{ Activate vicious, restart all widget updates +function activate(widget) + for w, i in pairs(registered) do + if widget == nil or w == widget then + for k, v in pairs(i) do + regregister(v) + end + end + end +end +-- }}} + +-- {{{ Update widget +function update(widget, reg, disablecache) + -- Check if there are any equal widgets + if reg == nil then + for w, i in pairs(registered) do + if w == widget then + for k, v in pairs(i) do + update(w, v, disablecache) + end + end + end + + return + end + + local t = os.time() + local data = {} + + -- Check if we have output chached for this widget newer than last + -- widget update + if widget_cache[reg.type] ~= nil then + local c = widget_cache[reg.type] + + if c.time == nil or c.time <= t-reg.timer or disablecache then + c.time = t + c.data = reg.type(reg.format, reg.padd) + end + + data = c.data + else + data = reg.type(reg.format, reg.padd) + end + + if type(data) == "table" then + if type(reg.format) == "string" then + data = helpers.format(reg.format, data) + elseif type(reg.format) == "function" then + data = reg.format(widget, data) + end + end + + if reg.field == nil then + widget.text = data + elseif widget.plot_data_add ~= nil then + widget:plot_data_add(reg.field, tonumber(data)) + elseif widget.bar_data_add ~= nil then + widget:bar_data_add(reg.field, tonumber(data)) + end + + return data +end +-- }}} +-- }}} |