X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/4bde4b5eea6ad1352078228c0d146f41b4c893e4..823ea6537a40f3b1fedfde9894c5f615d95ff24d:/helpers.lua?ds=sidebyside

diff --git a/helpers.lua b/helpers.lua
index 81910d2..4e90e16 100644
--- a/helpers.lua
+++ b/helpers.lua
@@ -1,16 +1,17 @@
 
 --[[
-                                                      
-     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 }
+local io     = { open  = io.open,
+                 lines = io.lines,
+                 popen = io.popen }
 local rawget = rawget
 
 -- Lain helper functions for internal use
@@ -30,23 +31,48 @@ 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 = {}
 
@@ -61,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 = {}