61 lines
1.9 KiB
Lua
61 lines
1.9 KiB
Lua
local constants = require 'constants'
|
|
local settings = require 'config.settings'
|
|
|
|
local frontApps = {}
|
|
|
|
sbar.add('bracket', constants.items.FRONT_APPS, {}, { position = 'left' })
|
|
|
|
local frontAppWatcher = sbar.add('item', {
|
|
drawing = false,
|
|
updates = true,
|
|
})
|
|
|
|
local function selectFocusedWindow(frontAppName)
|
|
for appName, app in pairs(frontApps) do
|
|
local isSelected = appName == frontAppName
|
|
local color = isSelected and settings.colors.orange or settings.colors.white
|
|
app:set {
|
|
label = { color = color },
|
|
icon = { color = color },
|
|
}
|
|
end
|
|
end
|
|
|
|
local function updateWindows(windows)
|
|
sbar.remove('/' .. constants.items.FRONT_APPS .. '\\.*/')
|
|
|
|
frontApps = {}
|
|
local foundWindows = string.gmatch(windows, '[^\n]+')
|
|
for window in foundWindows do
|
|
local parsedWindow = {}
|
|
for key, value in string.gmatch(window, '(%w+)=([%w%s]+)') do
|
|
parsedWindow[key] = value
|
|
end
|
|
|
|
local windowId = parsedWindow['id']
|
|
local windowName = parsedWindow['name']
|
|
local icon = settings.icons.apps[windowName] or settings.icons.apps['default']
|
|
|
|
frontApps[windowName] = sbar.add('item', constants.items.FRONT_APPS .. '.' .. windowName, {
|
|
label = {
|
|
padding_left = 0,
|
|
string = windowName,
|
|
},
|
|
icon = {
|
|
string = icon,
|
|
font = settings.fonts.icons(),
|
|
},
|
|
click_script = constants.aerospace_cmd .. ' focus --window-id ' .. windowId,
|
|
})
|
|
|
|
frontApps[windowName]:subscribe(constants.events.FRONT_APP_SWITCHED, function(env) selectFocusedWindow(env.INFO) end)
|
|
end
|
|
|
|
sbar.exec(constants.aerospace.GET_CURRENT_WINDOW, function(frontAppName) selectFocusedWindow(frontAppName:gsub('[\n\r]', '')) end)
|
|
end
|
|
|
|
local function getWindows() sbar.exec(constants.aerospace.LIST_WINDOWS, updateWindows) end
|
|
|
|
frontAppWatcher:subscribe(constants.events.UPDATE_WINDOWS, function() getWindows() end)
|
|
|
|
getWindows()
|