X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/1738f98c04158ecd7099ad15e97702818d793b2c..64540340dbe9071bc716c73ca4c90df14fdd6302:/helpers.lua?ds=inline

diff --git a/helpers.lua b/helpers.lua
index 5e958c3..6a47738 100644
--- a/helpers.lua
+++ b/helpers.lua
@@ -8,6 +8,7 @@
 
 local debug  = require("debug")
 
+local assert = assert
 local capi   = { timer = (type(timer) == 'table' and timer or require ("gears.timer")) }
 local io     = { open  = io.open,
                  lines = io.lines,
@@ -15,6 +16,8 @@ local io     = { open  = io.open,
 local rawget = rawget
 local table  = { sort   = table.sort }
 
+local wibox  = require("wibox")
+
 -- Lain helper functions for internal use
 -- lain.helpers
 local helpers = {}
@@ -49,13 +52,25 @@ end
 -- list/table if the file does not exist
 function helpers.lines_from(file)
   if not helpers.file_exists(file) then return {} end
-  lines = {}
+  local lines = {}
   for line in io.lines(file) do
     lines[#lines + 1] = line
   end
   return lines
 end
 
+-- match all lines from a file, returns an empty
+-- list/table if the file or match does not exist
+function helpers.lines_match(regexp, file)
+	local lines = {}
+	for index,line in pairs(helpers.lines_from(file)) do
+		if string.match(line, regexp) then
+			lines[index] = line
+		end
+	end
+	return lines
+end
+
 -- get first line of a file, return nil if
 -- the file does not exist
 function helpers.first_line(file)
@@ -77,10 +92,13 @@ end
 
 helpers.timer_table = {}
 
-function helpers.newtimer(name, timeout, fun, nostart)
-    helpers.timer_table[name] = capi.timer({ timeout = timeout })
+function helpers.newtimer(_name, timeout, fun, nostart)
+    local name = timeout
+    if not helpers.timer_table[name] then
+        helpers.timer_table[name] = capi.timer({ timeout = timeout })
+        helpers.timer_table[name]:start()
+    end
     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
@@ -90,7 +108,7 @@ end
 
 -- {{{ Pipe operations
 
--- read the full output of a pipe (command)
+-- read the full output of a command output
 function helpers.read_pipe(cmd)
    local f = assert(io.popen(cmd))
    local output = f:read("*all")
@@ -98,6 +116,16 @@ function helpers.read_pipe(cmd)
    return output
 end
 
+-- return line iterator of a command output
+function helpers.pipelines(...)
+    local f = assert(io.popen(...))
+    return function () -- iterator
+        local data = f:read()
+        if data == nil then f:close() end
+        return data
+    end
+end
+
 -- }}}
 
 -- {{{ A map utility
@@ -114,7 +142,9 @@ end
 
 -- }}}
 
---{{{ Iterate over table of records sorted by keys
+-- {{{ Misc
+
+-- iterate over table of records sorted by keys
 function helpers.spairs(t)
     -- collect the keys
     local keys = {}
@@ -131,6 +161,15 @@ function helpers.spairs(t)
         end
     end
 end
---}}}
+
+-- create a lain textbox widget
+function helpers.make_widget_textbox()
+    local w = wibox.widget.textbox('')
+    local t = wibox.widget.base.make_widget(w)
+    t.widget = w
+    return t
+end
+
+-- }}}
 
 return helpers