]> 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:

imap: fixed async call
authorcopycat-killer <dada@archlinux.info>
Mon, 23 Jan 2017 21:27:37 +0000 (22:27 +0100)
committercopycat-killer <dada@archlinux.info>
Mon, 23 Jan 2017 21:27:37 +0000 (22:27 +0100)
README.rst
widgets/alsabar.lua
widgets/contrib/tpbat/init.lua
widgets/imap.lua
widgets/pulseaudio.lua
widgets/pulsebar.lua
wiki

index 2bb89a8d2c839a0d454939c067a6c937172a7103..ec0abfdc6b4bf861390d2f92ad36f9784008c6a4 100644 (file)
@@ -18,7 +18,7 @@ If you still have to use branch 3.5.x, you can refer to the commit 301faf5_, but
 Description
 -----------
 
-Successor of awesome-vain_, this module provides new layouts, a set of widgets and utility functions, with the aim of improving Awesome_ usability and configurability.
+Successor of awesome-vain_, this module provides new layouts, **asynchronous** widgets and utility functions, with the aim of improving Awesome_ usability and configurability.
 
 Read the wiki_ for all the info.
 
index fde5eec5e5a9a9b67dd6f79142fec98b36c415b0..219ad96a1a8babfdc39d2eb5e11ca6711ba7797b 100644 (file)
@@ -47,7 +47,6 @@ local function worker(args)
     alsabar.togglechannel       = args.togglechannel
     alsabar.colors              = args.colors or alsabar.colors
     alsabar.followtag           = args.followtag or false
-    alsabar._notify             = args.notify or "on"
     alsabar.notification_preset = args.notification_preset
 
     if not alsabar.notification_preset then
index 8b53a4b25f986c9b294a3cc137478410289ef57b..380625f1b622a6a4319d3e308cc50913d754df55 100644 (file)
@@ -17,7 +17,6 @@
 local debug        = { getinfo = debug.getinfo }
 local newtimer     = require("lain.helpers").newtimer
 local first_line   = require("lain.helpers").first_line
-local beautiful    = require("beautiful")
 local naughty      = require("naughty")
 local wibox        = require("wibox")
 
index 0f8d994d09e75600f0f70a87d20f9ecbee6b5578..e00be5ba307b65eca5af9a962ba4562c7f78b519 100644 (file)
@@ -7,7 +7,6 @@
 --]]
 
 local helpers      = require("lain.helpers")
-local shell        = require("awful.util").shell
 local naughty      = require("naughty")
 local wibox        = require("wibox")
 local string       = { format = string.format,
@@ -33,12 +32,12 @@ local function worker(args                           )
     local head_command = "curl --connect-timeout 3 -fsm 3"
     local request = "-X 'SEARCH (UNSEEN)'"
 
+    if not server or not mail or not password then return end
+
     helpers.set_map(mail, 0)
 
     if not is_plain then
-        helpers.async(string.format("%s -s '%s'", shell, password), function(f)
-            password = f:gsub("\n", "")
-        end)
+        helpers.async(password, function(f) password = f:gsub("\n", "") end)
     end
 
     function update()
@@ -51,8 +50,8 @@ local function worker(args                           )
             mail_notification_preset.screen = awful.screen.focused()
         end
 
-        curl = string.format("%s -c '%s --url imaps://%s:%s/INBOX -u %s:%q %s -k'",
-               shell, head_command, server, port, mail, password, request)
+        curl = string.format("%s --url imaps://%s:%s/INBOX -u %s:%q %s -k",
+               head_command, server, port, mail, password, request)
 
         helpers.async(curl, function(f)
             _, mailcount = string.gsub(f, "%d+", "")
index 45981f39aec8c90d2c78f69737c76d70f269aa1e..f2d63d6cf9ae5bcbc1d654b4c90096c268ee450c 100644 (file)
@@ -6,8 +6,8 @@
                                                   
 --]]
 
-local read_pipe    = require("lain.helpers").read_pipe
-local newtimer     = require("lain.helpers").newtimer
+local helpers      = require("lain.helpers")
+local shell        = require("awful.util").shell
 local wibox        = require("wibox")
 local string       = { gmatch = string.gmatch,
                        match  = string.match,
@@ -24,33 +24,35 @@ local function worker(args)
    local settings    = args.settings or function() end
    local scallback   = args.scallback
 
-   pulseaudio.cmd    = args.cmd or string.format("pacmd list-sinks | sed -n -e '0,/*/d' -e '/base volume/d' -e '/volume:/p' -e '/muted:/p' -e '/device\\.string/p'")
+   pulseaudio.cmd    = args.cmd or "pacmd list-sinks | sed -n -e '0,/*/d' -e '/base volume/d' -e '/volume:/p' -e '/muted:/p' -e '/device\\.string/p'"
    pulseaudio.widget = wibox.widget.textbox()
 
    function pulseaudio.update()
       if scallback then pulseaudio.cmd = scallback() end
-      local s = read_pipe(pulseaudio.cmd)
 
-      volume_now = {}
-      volume_now.index = string.match(s, "index: (%S+)") or "N/A"
-      volume_now.sink  = string.match(s, "device.string = \"(%S+)\"") or "N/A"
-      volume_now.muted = string.match(s, "muted: (%S+)") or "N/A"
-
-      local ch = 1
-      volume_now.channel = {}
-      for v in string.gmatch(s, ":.-(%d+)%%") do
-          volume_now.channel[ch] = v
-          ch = ch + 1
-      end
-
-      volume_now.left  = volume_now.channel[1] or "N/A"
-      volume_now.right = volume_now.channel[2] or "N/A"
-
-      widget = pulseaudio.widget
-      settings()
+      helpers.async({ shell, "-c", pulseaudio.cmd }, function(s)
+          volume_now = {
+              index = string.match(s, "index: (%S+)") or "N/A",
+              sink  = string.match(s, "device.string = \"(%S+)\"") or "N/A",
+              muted = string.match(s, "muted: (%S+)") or "N/A"
+          }
+
+          local ch = 1
+          volume_now.channel = {}
+          for v in string.gmatch(s, ":.-(%d+)%%") do
+              volume_now.channel[ch] = v
+              ch = ch + 1
+          end
+
+          volume_now.left  = volume_now.channel[1] or "N/A"
+          volume_now.right = volume_now.channel[2] or "N/A"
+
+          widget = pulseaudio.widget
+          settings()
+      end)
    end
 
-   newtimer(string.format("pulseaudio-%s", timeout), timeout, pulseaudio.update)
+   helpers.newtimer(string.format("pulseaudio-%s", timeout), timeout, pulseaudio.update)
 
    return setmetatable(pulseaudio, { __index = pulseaudio.widget })
 end
index b7fb1e97322984f9f87fcd2009cf2f79a9566af5..9380a34b8d06e59f1498f7cb36ad7a7c1cda3e8a 100644 (file)
@@ -7,83 +7,31 @@
                                                   
 --]]
 
-local newtimer     = require("lain.helpers").newtimer
-local read_pipe    = require("lain.helpers").read_pipe
+local helpers      = require("lain.helpers")
 local awful        = require("awful")
-local beautiful    = require("beautiful")
 local naughty      = require("naughty")
 local wibox        = require("wibox")
 local math         = { modf   = math.modf }
-local mouse        = mouse
 local string       = { format = string.format,
                        match  = string.match,
                        rep    = string.rep }
+local type         = type
 local tonumber     = tonumber
 local setmetatable = setmetatable
 
 -- Pulseaudio volume bar
 -- lain.widgets.pulsebar
 local pulsebar = {
-    sink = 0,
-    step = "1%",
-
     colors = {
-        background = beautiful.bg_normal,
+        background = "#000000",
         mute       = "#EB8F8F",
         unmute     = "#A4CE8A"
     },
 
-    mixer = "pavucontrol",
-
-    notifications = {
-        font      = beautiful.font:sub(beautiful.font:find(""), beautiful.font:find(" ")),
-        font_size = "11",
-        color     = beautiful.fg_normal
-    },
-
     _current_level = 0,
     _muted         = false
 }
 
-function pulsebar.notify()
-    pulsebar.update()
-
-    local preset = {
-        title   = "",
-        text    = "",
-        timeout = 5,
-        font    = string.format("%s %s", pulsebar.notifications.font,
-                  pulsebar.notifications.font_size),
-        fg      = pulsebar.notifications.color
-    }
-
-    if pulsebar._muted
-    then
-        preset.title = string.format("Sink %s - Muted", pulsebar.sink)
-    else
-        preset.title = string.format("%s - %s%%", pulsebar.sink, pulsebar._current_level)
-    end
-
-    int = math.modf((pulsebar._current_level / 100) * awful.screen.focused().mywibox.height)
-    preset.text = string.format("[%s%s]", string.rep("|", int),
-                  string.rep(" ", awful.screen.focused().mywibox.height - int))
-
-    if pulsebar.followtag then
-        preset.screen = awful.screen.focused()
-    end
-
-    if pulsebar._notify ~= nil then
-        pulsebar._notify = naughty.notify ({
-            replaces_id = pulsebar._notify.id,
-            preset      = preset,
-        })
-    else
-        pulsebar._notify = naughty.notify ({
-            preset = preset,
-        })
-    end
-end
-
 local function worker(args)
     local args       = args or {}
     local timeout    = args.timeout or 5
@@ -95,12 +43,16 @@ local function worker(args)
     local vertical   = args.vertical or false
     local scallback  = args.scallback
 
-    pulsebar.cmd           = args.cmd or string.format("pacmd list-sinks | sed -n -e '0,/*/d' -e '/base volume/d' -e '/volume:/p' -e '/muted:/p'")
-    pulsebar.colors        = args.colors or pulsebar.colors
-    pulsebar.notifications = args.notifications or pulsebar.notifications
+    pulsebar.cmd           = args.cmd or "pacmd list-sinks | sed -n -e '0,/*/d' -e '/base volume/d' -e '/volume:/p' -e '/muted:/p' -e '/device\\.string/p'"
     pulsebar.sink          = args.sink or 0
-    pulsebar.step          = args.step or pulsebar.step
-    pulsebar.followtag   = args.followtag or false
+    pulsebar.colors        = args.colors or pulsebar.colors
+    pulsebar.followtag     = args.followtag or false
+    pulsebar.notifications = args.notification_preset
+
+    if not pulsebar.notification_preset then
+        pulsebar.notification_preset      = naughty.config.defaults
+        pulsebar.notification_preset.font = "Monospace 11"
+    end
 
     pulsebar.bar = wibox.widget {
         forced_height    = height,
@@ -117,61 +69,76 @@ local function worker(args)
 
     pulsebar.tooltip = awful.tooltip({ objects = { pulsebar.bar } })
 
-    function pulsebar.update()
+    function pulsebar.update(callback)
         if scallback then pulseaudio.cmd = scallback() end
-        local s = read_pipe(pulsebar.cmd)
-
-        volume_now = {}
-        volume_now.left  = tonumber(string.match(s, ":.-(%d+)%%"))
-        volume_now.right = tonumber(string.match(s, ":.-(%d+)%%"))
-        volume_now.muted = string.match(s, "muted: (%S+)")
-
-        local volu = volume_now.left
-        local mute = volume_now.muted
-
-        if (volu and volu ~= pulsebar._current_level) or (mute and mute ~= pulsebar._muted)
-        then
-            pulsebar._current_level = volu
-            pulsebar.bar:set_value(pulsebar._current_level / 100)
-            if (not mute and volu == 0) or mute == "yes"
-            then
-                pulsebar._muted = true
-                pulsebar.tooltip:set_text ("[Muted]")
-                pulsebar.bar.color = pulsebar.colors.mute
+
+        helpers.async({ awful.util.shell, "-c", pulsebar.cmd }, function(s)
+            volume_now = {
+                index = string.match(s, "index: (%S+)") or "N/A",
+                sink  = string.match(s, "device.string = \"(%S+)\"") or "N/A",
+                muted = string.match(s, "muted: (%S+)") or "N/A"
+            }
+
+            local ch = 1
+            volume_now.channel = {}
+            for v in string.gmatch(s, ":.-(%d+)%%") do
+              volume_now.channel[ch] = v
+              ch = ch + 1
+            end
+
+            volume_now.left  = volume_now.channel[1] or "N/A"
+            volume_now.right = volume_now.channel[2] or "N/A"
+
+            local volu = volume_now.left
+            local mute = volume_now.muted
+
+            if (volu and volu ~= pulsebar._current_level) or (mute and mute ~= pulsebar._muted) then
+                pulsebar._current_level = volu
+                pulsebar.bar:set_value(pulsebar._current_level / 100)
+                if (not mute and volu == 0) or mute == "yes" then
+                    pulsebar._muted = true
+                    pulsebar.tooltip:set_text ("[Muted]")
+                    pulsebar.bar.color = pulsebar.colors.mute
+                else
+                    pulsebar._muted = false
+                    pulsebar.tooltip:set_text(string.format("%s: %s", pulsebar.sink, volu))
+                    pulsebar.bar.color = pulsebar.colors.unmute
+                end
+
+                settings()
+
+                if type(callback) == "function" then callback() end
+            end
+        end)
+    end
+
+    function pulsebar.notify()
+        pulsebar.update(function()
+            local preset = pulsebar.notification_preset
+
+            if pulsebar._muted then
+                preset.title = string.format("Sink %s - Muted", pulsebar.sink)
             else
-                pulsebar._muted = false
-                pulsebar.tooltip:set_text(string.format("%s: %s", pulsebar.sink, volu))
-                pulsebar.bar.color = pulsebar.colors.unmute
+                preset.title = string.format("%s - %s%%", pulsebar.sink, pulsebar._current_level)
             end
-            settings()
-        end
+
+            int = math.modf((pulsebar._current_level / 100) * awful.screen.focused().mywibox.height)
+            preset.text = string.format("[%s%s]", string.rep("|", int),
+                          string.rep(" ", awful.screen.focused().mywibox.height - int))
+
+            if pulsebar.followtag then preset.screen = awful.screen.focused() end
+
+            pulsebar.id = naughty.notify ({
+                replaces_id = pulsebar.id,
+                preset      = preset
+            }).id
+        end)
     end
 
-    pulsebar.bar:buttons(awful.util.table.join (
-          awful.button({}, 1, function()
-            awful.util.spawn(pulsebar.mixer)
-          end),
-          awful.button({}, 2, function()
-                                               awful.util.spawn(string.format("pactl set-sink-volume %d 100%%", pulsebar.sink))
-            pulsebar.update()
-          end),
-          awful.button({}, 3, function()
-                                               awful.util.spawn(string.format("pactl set-sink-mute %d toggle", pulsebar.sink))
-            pulsebar.update()
-          end),
-          awful.button({}, 4, function()
-                                               awful.util.spawn(string.format("pactl set-sink-volume %d +%s", pulsebar.sink, pulsebar.step))
-            pulsebar.update()
-          end),
-          awful.button({}, 5, function()
-                                               awful.util.spawn(string.format("pactl set-sink-volume %d -%s", pulsebar.sink, pulsebar.step))
-            pulsebar.update()
-                                       end)
-    ))
 
     timer_id = string.format("pulsebar-%s", pulsebar.sink)
 
-    newtimer(timer_id, timeout, pulsebar.update)
+    helpers.newtimer(timer_id, timeout, pulsebar.update)
 
     return pulsebar
 end
diff --git a/wiki b/wiki
index 2f7c2a96a29a94829acf0b9e7fb614a7432a5092..3d8de07f057bcc4cb16bb1244e53276ea11ecff4 160000 (submodule)
--- a/wiki
+++ b/wiki
@@ -1 +1 @@
-Subproject commit 2f7c2a96a29a94829acf0b9e7fb614a7432a5092
+Subproject commit 3d8de07f057bcc4cb16bb1244e53276ea11ecff4