]> git.madduck.net Git - etc/awesome.git/blobdiff - helpers.lua

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

whitespaces cleaning
[etc/awesome.git] / helpers.lua
index c42ce6184dce4ba3ef9e595ca1854f8a09fd7a00..dbee617121e5fb661cb4f01cf264cc84ea0fa6c7 100644 (file)
@@ -2,15 +2,15 @@
 --[[
                                                   
      Licensed under GNU General Public License v2 
-      * (c) 2013,      Luke Bonham                
-      * (c) 2010-2012, Peter Hofmann              
+      * (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 }
 local rawget = rawget
 
 -- Lain helper functions for internal use
@@ -30,18 +30,43 @@ 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
 
 -- }}}