diff options
Diffstat (limited to '.config/sketchybar/items/menus.lua')
| -rw-r--r-- | .config/sketchybar/items/menus.lua | 102 |
1 files changed, 48 insertions, 54 deletions
diff --git a/.config/sketchybar/items/menus.lua b/.config/sketchybar/items/menus.lua index 66cdd4a..805162a 100644 --- a/.config/sketchybar/items/menus.lua +++ b/.config/sketchybar/items/menus.lua @@ -1,78 +1,72 @@ -local colors = require("colors") -local settings = require("settings") -local sbar = require("sketchybar") +local constants = require("constants") +local settings = require("config.settings") -local menu_watcher = sbar.add("item", { +local maxItems <const> = 15 +local menuItems = {} +local isShowingMenu = false + +local frontAppWatcher = sbar.add("item", { drawing = false, - updates = false, + updates = true, }) -local space_menu_swap = sbar.add("item", { + +local swapWatcher = sbar.add("item", { drawing = false, updates = true, }) -sbar.add("event", "swap_menus_and_spaces") -local max_items = 15 -local menu_items = {} -for i = 1, max_items, 1 do - local menu = sbar.add("item", "menu." .. i, { - padding_left = settings.paddings, - padding_right = settings.paddings, - drawing = false, - icon = { drawing = false }, - label = { - font = { - style = settings.font.style_map[i == 1 and "Heavy" or "Semibold"], +local function createPlaceholders() + for index = 1, maxItems, 1 do + local menu = sbar.add("item", constants.items.MENU .. "." .. index, { + drawing = false, + icon = { drawing = false }, + width = "dynamic", + label = { + font = { + style = index == 1 and settings.fonts.styles.bold or settings.fonts.styles.regular, + }, }, - padding_left = 6, - padding_right = 6, + click_script = "$CONFIG_DIR/bridge/menus/bin/menus -s " .. index, + }) + menuItems[index] = menu + end + + sbar.add("bracket", { "/" .. constants.items.MENU .. "\\..*/" }, { + background = { + color = settings.colors.bg1, + padding_left = settings.dimens.padding.item, + padding_right = settings.dimens.padding.item, }, - click_script = "$CONFIG_DIR/helpers/menus/bin/menus -s " .. i, }) - - menu_items[i] = menu end -sbar.add("bracket", { "/menu\\..*/" }, { - background = { color = colors.bg1 }, -}) - -local menu_padding = sbar.add("item", "menu.padding", { - drawing = false, - width = 5, -}) +local function updateMenus() + sbar.set("/" .. constants.items.MENU .. "\\..*/", { drawing = false }) -local function update_menus(env) - sbar.exec("$CONFIG_DIR/helpers/menus/bin/menus -l", function(menus) - sbar.set("/menu\\..*/", { drawing = false }) - menu_padding:set({ drawing = true }) - id = 1 + sbar.exec("$CONFIG_DIR/bridge/menus/bin/menus -l", function(menus) + local index = 1 for menu in string.gmatch(menus, "[^\r\n]+") do - if id < max_items then - menu_items[id]:set({ label = menu, drawing = true }) + if index < maxItems then + menuItems[index]:set({ + width = "dynamic", + label = menu, + drawing = isShowingMenu, + }) else break end - id = id + 1 + index = index + 1 end end) + + sbar.set(constants.items.MENU .. ".padding", { drawing = isShowingMenu }) end -menu_watcher:subscribe("front_app_switched", update_menus) +frontAppWatcher:subscribe(constants.events.FRONT_APP_SWITCHED, updateMenus) -space_menu_swap:subscribe("swap_menus_and_spaces", function(env) - local drawing = menu_items[1]:query().geometry.drawing == "on" - if drawing then - menu_watcher:set({ updates = false }) - sbar.set("/menu\\..*/", { drawing = false }) - sbar.set("/space\\..*/", { drawing = true }) - sbar.set("front_app", { drawing = true }) - else - menu_watcher:set({ updates = true }) - sbar.set("/space\\..*/", { drawing = false }) - sbar.set("front_app", { drawing = false }) - update_menus() - end +swapWatcher:subscribe(constants.events.SWAP_MENU_AND_SPACES, function(env) + isShowingMenu = env.isShowingMenu == "on" + updateMenus() end) -return menu_watcher +createPlaceholders() |
