From 821d35c8df86f10e3078047daf6e79121112b729 Mon Sep 17 00:00:00 2001 From: Alexander Gehrke Date: Wed, 7 May 2025 14:47:48 +0200 Subject: [PATCH] lockhl: allow setting a default state This allows e.g. to invert the warning for numlock --- lockhl.lua | 79 ++++++++++++++++++++++++++++++++------------------ mybindings.lua | 4 +-- 2 files changed, 53 insertions(+), 30 deletions(-) diff --git a/lockhl.lua b/lockhl.lua index d8ed5d7..0de6b23 100644 --- a/lockhl.lua +++ b/lockhl.lua @@ -6,41 +6,64 @@ local beautiful = require("beautiful") local lockhl = { bg_lock = beautiful.bg_urgent, bg_normal = beautiful.bg_normal } local target_wibars = {} -function lockhl:setup(wibars, bg_lock, bg_normal) - target_wibars = wibars - if bg_lock then self.bg_lock = bg_lock end - if bg_normal then self.bg_normal = bg_normal end - return lockhl +function lockhl:setup(wibars, bg_lock, bg_normal, defaults) + target_wibars = wibars + if bg_lock then + self.bg_lock = bg_lock + end + if bg_normal then + self.bg_normal = bg_normal + end + + if defaults ~= nil then + for lock, normal_state in pairs(defaults) do + print("lock: " .. lock .. " normal_state: " .. tostring(normal_state)) + lockhl:on_lock(lock, normal_state) + end + end + return lockhl end local function check_lock(lock, cb) - awful.spawn.with_line_callback( - 'bash -c "sleep 0.2; xset q | grep -Po \\"' .. lock .. ' Lock:\\\\s*\\\\K(on|off)\\" 2>&1"', - { stdout = function(output) cb(output == "on") end } - ) + awful.spawn.with_line_callback( + 'bash -c "sleep 0.2; xset q | grep -Po \\"' .. lock .. ' Lock:\\\\s*\\\\K(on|off)\\" 2>&1"', + { + stdout = function(output) + cb(output == "on") + end, + } + ) end function lockhl:target_color(is_on, lock) - if is_on then - if type(self.bg_lock) == 'table' then - return self.bg_lock[lock] - else - return self.bg_lock - end - else - return self.bg_normal - end + if is_on then + if type(self.bg_lock) == "table" then + return self.bg_lock[lock] + else + return self.bg_lock + end + else + return self.bg_normal + end end -function lockhl:on_lock(lock) - check_lock(lock, function(is_on) - local newbg = self:target_color(is_on, lock) - for _, bar in pairs(target_wibars) do - bar.bg = newbg - end - end) +local function xor(a, b) + return not (not a == not b) end -return setmetatable(lockhl, { __call = function(_, lock) - return function() lockhl:on_lock(lock) end -end }) +function lockhl:on_lock(lock, normal_state) + check_lock(lock, function(is_on) + local newbg = self:target_color(xor(is_on, normal_state), lock) + for _, bar in pairs(target_wibars) do + bar.bg = newbg + end + end) +end + +return setmetatable(lockhl, { + __call = function(_, lock, normal_state) + return function() + lockhl:on_lock(lock, normal_state) + end + end, +}) diff --git a/mybindings.lua b/mybindings.lua index 7751d65..8102acf 100644 --- a/mybindings.lua +++ b/mybindings.lua @@ -18,7 +18,7 @@ for s in screen do table.insert(wibars, s.rightwibar) end local lockhl = require("lockhl") -lockhl:setup(wibars, "#F2C740") +lockhl:setup(wibars, "#F2C740", require("beautiful").bg_normal, { Num = true, Caps = false }) local function mpdserver(host) return function() @@ -189,7 +189,7 @@ local myglobalkeys = awful.util.table.join( awful.key({}, "XF86Display", mb.grabf({ keymap = displaymap, name = "Rotate" })), awful.key({ modkey }, "e", binder.spawn("rofi -show emoji")), - awful.key({}, "Num_Lock", lockhl("Num")), + awful.key({}, "Num_Lock", lockhl("Num", true)), awful.key({}, "Caps_Lock", lockhl("Caps")) --}}}