local constants = require 'constants' local settings = require 'config.settings' local maxItems = 15 local menuItems = {} local isShowingMenu = false local frontAppWatcher = sbar.add('item', { drawing = false, updates = true, }) local swapWatcher = sbar.add('item', { drawing = false, updates = true, }) 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, }, }, click_script = 'sk-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, }, }) end local function updateMenus() sbar.set('/' .. constants.items.MENU .. '\\..*/', { drawing = false }) sbar.exec('sk-menus -l', function(menus) local index = 1 for menu in string.gmatch(menus, '[^\r\n]+') do if index < maxItems then menuItems[index]:set { width = 'dynamic', label = menu, drawing = isShowingMenu, } else break end index = index + 1 end end) sbar.set(constants.items.MENU .. '.padding', { drawing = isShowingMenu }) end frontAppWatcher:subscribe(constants.events.FRONT_APP_SWITCHED, updateMenus) swapWatcher:subscribe(constants.events.SWAP_MENU_AND_SPACES, function(env) isShowingMenu = env.isShowingMenu == 'on' updateMenus() end) createPlaceholders()