summaryrefslogtreecommitdiff
path: root/lain/helpers.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lain/helpers.lua')
-rw-r--r--lain/helpers.lua103
1 files changed, 103 insertions, 0 deletions
diff --git a/lain/helpers.lua b/lain/helpers.lua
new file mode 100644
index 0000000..dbee617
--- /dev/null
+++ b/lain/helpers.lua
@@ -0,0 +1,103 @@
+
+--[[
+
+ Licensed under GNU General Public License v2
+ * (c) 2013, Luke Bonham
+
+--]]
+
+local debug = require("debug")
+
+local capi = { timer = timer }
+local io = { open = io.open,
+ lines = io.lines }
+local rawget = rawget
+
+-- Lain helper functions for internal use
+-- lain.helpers
+local helpers = {}
+
+helpers.lain_dir = debug.getinfo(1, 'S').source:match[[^@(.*/).*$]]
+helpers.icons_dir = helpers.lain_dir .. 'icons/'
+helpers.scripts_dir = helpers.lain_dir .. 'scripts/'
+
+-- {{{ Modules loader
+
+function helpers.wrequire(table, key)
+ local module = rawget(table, key)
+ return module or require(table._NAME .. '.' .. key)
+end
+
+-- }}}
+
+-- {{{ File operations
+
+-- see if the file exists and is readable
+function helpers.file_exists(file)
+ local f = io.open(file)
+ if f then
+ local s = f:read()
+ f:close()
+ f = s
+ end
+ return f ~= nil
+end
+
+-- get all lines from a file, returns an empty
+-- list/table if the file does not exist
+function helpers.lines_from(file)
+ if not helpers.file_exists(file) then return {} end
+ lines = {}
+ for line in io.lines(file) do
+ lines[#lines + 1] = line
+ end
+ return lines
+end
+
+-- get first line of a file, return nil if
+-- the file does not exist
+function helpers.first_line(file)
+ return helpers.lines_from(file)[1]
+end
+
+-- get first non empty line from a file,
+-- returns nil otherwise
+function helpers.first_nonempty_line(file)
+ for k,v in pairs(helpers.lines_from(file)) do
+ if #v then return v end
+ end
+ return nil
+end
+
+-- }}}
+
+-- {{{ Timer maker
+
+helpers.timer_table = {}
+
+function helpers.newtimer(name, timeout, fun, nostart)
+ helpers.timer_table[name] = capi.timer({ timeout = timeout })
+ helpers.timer_table[name]:connect_signal("timeout", fun)
+ helpers.timer_table[name]:start()
+ if not nostart then
+ helpers.timer_table[name]:emit_signal("timeout")
+ end
+end
+
+-- }}}
+
+-- {{{ A map utility
+
+helpers.map_table = {}
+
+function helpers.set_map(element, value)
+ helpers.map_table[element] = value
+end
+
+function helpers.get_map(element)
+ return helpers.map_table[element]
+end
+
+-- }}}
+
+return helpers