]> git.madduck.net Git - etc/awesome.git/commitdiff

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:

abstract out reading full output of pipes
authorDario Gjorgjevski <dario.gjorgjevski@gmail.com>
Wed, 12 Aug 2015 23:56:37 +0000 (01:56 +0200)
committerDario Gjorgjevski <dario.gjorgjevski@gmail.com>
Wed, 12 Aug 2015 23:56:37 +0000 (01:56 +0200)
helpers.lua
widgets/alsa.lua
widgets/alsabar.lua
widgets/base.lua
widgets/contrib/kbdlayout.lua
widgets/fs.lua
widgets/imap.lua
widgets/maildir.lua
widgets/net.lua
widgets/weather.lua

index dbee617121e5fb661cb4f01cf264cc84ea0fa6c7..4e90e169c15a570bb31aa4c6fa3f1ac9e70c5336 100644 (file)
@@ -10,7 +10,8 @@ local debug  = require("debug")
 
 local capi   = { timer = timer }
 local io     = { open  = io.open,
 
 local capi   = { timer = timer }
 local io     = { open  = io.open,
-                 lines = io.lines }
+                 lines = io.lines,
+                 popen = io.popen }
 local rawget = rawget
 
 -- Lain helper functions for internal use
 local rawget = rawget
 
 -- Lain helper functions for internal use
@@ -86,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 = {}
 -- {{{ A map utility
 
 helpers.map_table = {}
index 91bf488290b7824a7b651f99f00f1098bb869546..85d53114e132a683fe2af8af9f86908af61b8f39 100644 (file)
@@ -8,10 +8,10 @@
 --]]
 
 local newtimer        = require("lain.helpers").newtimer
 --]]
 
 local newtimer        = require("lain.helpers").newtimer
+local read_pipe       = require("lain.helpers").read_pipe
 
 local wibox           = require("wibox")
 
 
 local wibox           = require("wibox")
 
-local io              = { popen  = io.popen }
 local string          = { match  = string.match,
                           format = string.format }
 
 local string          = { match  = string.match,
                           format = string.format }
 
@@ -32,9 +32,7 @@ local function worker(args)
     alsa.widget = wibox.widget.textbox('')
 
     function alsa.update()
     alsa.widget = wibox.widget.textbox('')
 
     function alsa.update()
-        local f = assert(io.popen(string.format("%s get %s", alsa.cmd, alsa.channel)))
-        local mixer = f:read("*all")
-        f:close()
+        local mixer = read_pipe(string.format("%s get %s", alsa.cmd, alsa.channel))
 
         volume_now = {}
 
 
         volume_now = {}
 
index f504cc0213d3d4e755059b383467b61510c50b56..c7498d2e6be2bf31fdac43ba8288e25e8d9eadfe 100644 (file)
@@ -8,12 +8,12 @@
 --]]
 
 local newtimer     = require("lain.helpers").newtimer
 --]]
 
 local newtimer     = require("lain.helpers").newtimer
+local read_pipe    = require("lain.helpers").read_pipe
 
 local awful        = require("awful")
 local beautiful    = require("beautiful")
 local naughty      = require("naughty")
 
 
 local awful        = require("awful")
 local beautiful    = require("beautiful")
 local naughty      = require("naughty")
 
-local io           = { popen  = io.popen }
 local math         = { modf   = math.modf }
 local mouse        = mouse
 local string       = { format = string.format,
 local math         = { modf   = math.modf }
 local mouse        = mouse
 local string       = { format = string.format,
@@ -122,9 +122,7 @@ local function worker(args)
 
     function alsabar.update()
         -- Get mixer control contents
 
     function alsabar.update()
         -- Get mixer control contents
-        local f = assert(io.popen(string.format("%s get %s", alsabar.cmd, alsabar.channel)))
-        local mixer = f:read("*all")
-        f:close()
+        local mixer = read_pipe(string.format("%s get %s", alsabar.cmd, alsabar.channel))
 
         -- Capture mixer control state:          [5%] ... ... [on]
         local volu, mute = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
 
         -- Capture mixer control state:          [5%] ... ... [on]
         local volu, mute = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
index 2a7bf1027545bcc32a1be73dbb7ebaa502a292ba..2f377f78bb4ccd552bf01f5299476719f21e2d53 100644 (file)
@@ -7,9 +7,10 @@
 --]]
 
 local newtimer     = require("lain.helpers").newtimer
 --]]
 
 local newtimer     = require("lain.helpers").newtimer
+local read_pipe    = require("lain.helpers").read_pipe
+
 local wibox        = require("wibox")
 
 local wibox        = require("wibox")
 
-local io           = { popen = io.popen }
 local setmetatable = setmetatable
 
 -- Basic template for custom widgets
 local setmetatable = setmetatable
 
 -- Basic template for custom widgets
@@ -25,9 +26,7 @@ local function worker(args)
     base.widget = wibox.widget.textbox('')
 
     function base.update()
     base.widget = wibox.widget.textbox('')
 
     function base.update()
-        local f = assert(io.popen(cmd))
-        output = f:read("*all")
-        f:close()
+        output = read_pipe(cmd)
         widget = base.widget
         settings()
     end
         widget = base.widget
         settings()
     end
index c5242c18e814824fde7547318ccc8849939f3fb7..8d13a74f285f7ae4acbe51dca19b06a9b38a9e63 100644 (file)
@@ -1,9 +1,17 @@
 
 
+--[[
+
+     Licensed under GNU General Public License v2 
+      * (c) 2015, Dario Gjorgjevski
+
+--]]
+
 local newtimer     = require("lain.helpers").newtimer
 local newtimer     = require("lain.helpers").newtimer
+local read_pipe    = require("lain.helpers").read_pipe
+
 local wibox        = require("wibox")
 
 local string       = { match = string.match }
 local wibox        = require("wibox")
 
 local string       = { match = string.match }
-local io           = { popen = io.popen }
 
 local setmetatable = setmetatable
 
 
 local setmetatable = setmetatable
 
@@ -11,29 +19,33 @@ local function worker (args)
    local kbdlayout    = {}
    kbdlayout.widget   = wibox.widget.textbox('')
 
    local kbdlayout    = {}
    kbdlayout.widget   = wibox.widget.textbox('')
 
-   local settings     = args.settings or function () end
-   local layouts      = args.layouts
-   local idx          = 1
+   local layouts          = args.layouts
+   local settings         = args.settings or function () end
+   local add_us_secondary = args.add_us_secondary or true
+   local idx              = 1
    
    local function run_settings (layout, variant)
       widget = kbdlayout.widget
    
    local function run_settings (layout, variant)
       widget = kbdlayout.widget
-      kbdlayout_now = { layout=layout, variant=variant }
+      kbdlayout_now = { layout=string.match(layout, "[^,]+"), -- Make sure to match the primary layout only.
+                       variant=variant }
       settings()
    end
    
    function kbdlayout.update ()
       settings()
    end
    
    function kbdlayout.update ()
-      local file   = assert(io.popen('setxkbmap -query'))
-      local status = file:read('*all')
-      file:close()
+      local status = read_pipe('setxkbmap -query')
 
 
-      run_settings(string.match(status, "layout:%s*([^\n]*)%s*"),
-                  string.match(status, "variant:%s*([^\n]*)%s*"))
+      run_settings(string.match(status, "layout:%s*([^\n]*)"),
+                  string.match(status, "variant:%s*([^\n]*)"))
    end
 
    function kbdlayout.set (i)
       idx = ((i - 1) % #layouts) + 1 -- Make sure to wrap around as needed.
       local to_execute = 'setxkbmap ' .. layouts[idx].layout
 
    end
 
    function kbdlayout.set (i)
       idx = ((i - 1) % #layouts) + 1 -- Make sure to wrap around as needed.
       local to_execute = 'setxkbmap ' .. layouts[idx].layout
 
+      if add_us_secondary then
+        to_execute = to_execute .. ",us"
+      end
+
       if layouts[idx].variant then
         to_execute = to_execute .. ' ' .. layouts[idx].variant
       end
       if layouts[idx].variant then
         to_execute = to_execute .. ' ' .. layouts[idx].variant
       end
index c3a9e180ed2944e69ca8bcf61d90299392fc1d63..a01d3cf6c0a174e26784a843a8c6110bb35812b2 100644 (file)
@@ -38,9 +38,7 @@ end
 function fs:show(t_out)
     fs:hide()
 
 function fs:show(t_out)
     fs:hide()
 
-    local f = io.popen(helpers.scripts_dir .. "dfs")
-    ws = f:read("*all"):gsub("\n*$", "")
-    f:close()
+    ws = helpers.read_pipe(helpers.scripts_dir .. "dfs"):gsub("\n*$", "")
 
     if fs.followmouse then
         fs.notification_preset.screen = mouse.screen
 
     if fs.followmouse then
         fs.notification_preset.screen = mouse.screen
index 62b33d711c5f1061d1ed944e37954b13045ac287..ea763dfa4127ff4baf1cdbd642b7abf61f789a1b 100644 (file)
@@ -43,9 +43,7 @@ local function worker(args)
 
     if not is_plain
     then
 
     if not is_plain
     then
-        local f = io.popen(password)
-        password = f:read("*all"):gsub("\n", "")
-        f:close()
+        password = helpers.read_pipe(password):gsub("\n", "")
     end
 
     imap.widget = wibox.widget.textbox('')
     end
 
     imap.widget = wibox.widget.textbox('')
index 315ae34a819d8f82011cb0821d1772199db8a979..cb96a3015107ff1b8bf0d3da985b81f62a88982d 100644 (file)
@@ -8,12 +8,12 @@
 --]]
 
 local newtimer        = require("lain.helpers").newtimer
 --]]
 
 local newtimer        = require("lain.helpers").newtimer
+local read_pipe       = require("lain.helpers").read_pipe
 
 local wibox           = require("wibox")
 
 local util            = require("lain.util")
 
 
 local wibox           = require("wibox")
 
 local util            = require("lain.util")
 
-local io              = { popen  = io.popen }
 local os              = { getenv = os.getenv }
 local pairs           = pairs
 local string          = { len    = string.len,
 local os              = { getenv = os.getenv }
 local pairs           = pairs
 local string          = { len    = string.len,
@@ -50,10 +50,9 @@ local function worker(args)
                 -- match files that begin with a dot.
                 -- Afterwards the length of this string is the number of
                 -- new mails in that box.
                 -- match files that begin with a dot.
                 -- Afterwards the length of this string is the number of
                 -- new mails in that box.
-                local np = io.popen("find " .. line ..
+                local mailstring = read_pipe("find " .. line ..
                                     "/new -mindepth 1 -type f " ..
                                     "-not -name '.*' -printf a")
                                     "/new -mindepth 1 -type f " ..
                                     "-not -name '.*' -printf a")
-                local mailstring = np:read("*all")
 
                 -- Strip off leading mailpath.
                 local box = string.match(line, mailpath .. "/*([^/]+)")
 
                 -- Strip off leading mailpath.
                 local box = string.match(line, mailpath .. "/*([^/]+)")
@@ -65,10 +64,11 @@ local function worker(args)
             end
         until line == nil
 
             end
         until line == nil
 
+       p:close()
         table.sort(boxes)
 
         newmail = "no mail"
         table.sort(boxes)
 
         newmail = "no mail"
-        --Count the total number of mails irrespective of where it was found
+        -- Count the total number of mails irrespective of where it was found
         total = 0
 
         for box, number in pairs(boxes)
         total = 0
 
         for box, number in pairs(boxes)
index d859d911123ad9dc575ac77a7697739c01baea56..a578ae4ca9cc405454c4cc57a6b23cd5a9be2a0e 100644 (file)
@@ -13,7 +13,6 @@ local notify_fg    = require("beautiful").fg_focus
 local naughty      = require("naughty")
 local wibox        = require("wibox")
 
 local naughty      = require("naughty")
 local wibox        = require("wibox")
 
-local io           = { popen  = io.popen }
 local string       = { format = string.format,
                        gsub   = string.gsub,
                        match  = string.match }
 local string       = { format = string.format,
                        gsub   = string.gsub,
                        match  = string.match }
@@ -28,9 +27,7 @@ local net = {
 }
 
 function net.get_device()
 }
 
 function net.get_device()
-    f = io.popen("ip link show | cut -d' ' -f2,9")
-    ws = f:read("*all")
-    f:close()
+    local ws = helpers.read_pipe("ip link show | cut -d' ' -f2,9")
     ws = ws:match("%w+: UP") or ws:match("ppp%w+: UNKNOWN")
     if ws ~= nil then
         return ws:match("(%w+):")
     ws = ws:match("%w+: UP") or ws:match("ppp%w+: UNKNOWN")
     if ws ~= nil then
         return ws:match("(%w+):")
index fb37a522e9d2bcc0d868ab723e314416cb647571..8a0d75150c372592360050650554a7f569080635 100644 (file)
@@ -7,9 +7,12 @@
 --]]
 
 local newtimer     = require("lain.helpers").newtimer
 --]]
 
 local newtimer     = require("lain.helpers").newtimer
+local read_pipe    = require("lain.helpers").read_pipe
+
 local async        = require("lain.asyncshell")
 local json         = require("lain.util").dkjson
 local lain_icons   = require("lain.helpers").icons_dir
 local async        = require("lain.asyncshell")
 local json         = require("lain.util").dkjson
 local lain_icons   = require("lain.helpers").icons_dir
+
 local naughty      = require("naughty")
 local wibox        = require("wibox")
 
 local naughty      = require("naughty")
 local wibox        = require("wibox")
 
@@ -83,9 +86,7 @@ local function worker(args)
             if not err and weather_now ~= nil and tonumber(weather_now["cod"]) == 200 then
                 weather.notification_text = ''
                 for i = 1, weather_now["cnt"] do
             if not err and weather_now ~= nil and tonumber(weather_now["cod"]) == 200 then
                 weather.notification_text = ''
                 for i = 1, weather_now["cnt"] do
-                    local f = assert(io.popen(string.format(date_cmd, weather_now["list"][i]["dt"])))
-                    day = string.gsub(f:read("*all"), "\n", "")
-                    f:close()
+                    day = string.gsub(read_pipe(string.format(date_cmd, weather_now["list"][i]["dt"])), "\n", "")
 
                     tmin = math.floor(weather_now["list"][i]["temp"]["min"])
                     tmax = math.floor(weather_now["list"][i]["temp"]["max"])
 
                     tmin = math.floor(weather_now["list"][i]["temp"]["min"])
                     tmax = math.floor(weather_now["list"][i]["temp"]["max"])