X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/8d37b9a1e4521a220f20ce2e1414f656aa3a5015..9f8eb5d0a2fa32b81df9bd70cd0761773955b724:/helpers.lua

diff --git a/helpers.lua b/helpers.lua
index a8c4cd7..4e90e16 100644
--- a/helpers.lua
+++ b/helpers.lua
@@ -1,15 +1,18 @@
 
 --[[
-                                                      
-     Licensed under GNU General Public License v2     
-      * (c) 2013,      Luke Bonham                    
-      * (c) 2010-2012, Peter Hofmann                  
-                                                      
+                                                  
+     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,
+                 popen = io.popen }
 local rawget = rawget
-local io     = { open = io.open }
 
 -- Lain helper functions for internal use
 -- lain.helpers
@@ -28,28 +31,53 @@ end
 
 -- }}}
 
--- {{{ Read the first line of a file or return nil.
+-- {{{ 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
 
-function helpers.first_line(f)
-    local fp = io.open(f)
-    if not fp
-    then
-        return 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
 
-    local content = fp:read("*l")
-    fp:close()
-    return content
+-- 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 
+-- {{{ Timer maker
 
 helpers.timer_table = {}
 
 function helpers.newtimer(name, timeout, fun, nostart)
-    helpers.timer_table[name] = timer({ timeout = timeout })
+    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
@@ -59,6 +87,18 @@ end
 
 -- }}}
 
+-- {{{ Pipe operations
+
+-- read the full output of a pipe (command)
+function helpers.read_pipe(cmd)
+   local f = assert(io.popen(cmd))
+   local output = f:read("*all")
+   f:close()
+   return output
+end
+
+-- }}}
+
 -- {{{ A map utility
 
 helpers.map_table = {}