local args, state = ... local maximized_containers = scroll.state_get_value(state, "maximized_containers") or {} local debug_notify = function(msg) scroll.command(nil, "exec notify-send " .. msg) end local maximize_container = function(container, workspace) local wf = scroll.container_get_width_fraction(container) local hf = scroll.container_get_height_fraction(container) maximized_containers[workspace] = { container = container, wf = wf, hf = hf, workspace = workspace } scroll.state_set_value(state, "maximized_containers", maximized_containers) scroll.command(container, "set_size h 1.0") scroll.command(container, "set_size v 1.0") end local maximize_when_only = function() local focused_workspace = scroll.focused_workspace() local containers = scroll.workspace_get_tiling(focused_workspace) local focused_container = scroll.focused_container() local maximized_container = maximized_containers[focused_workspace] if #containers == 1 then if not maximized_container or (maximized_container and maximized_container.container ~= focused_container) then -- debug_notify("Maximizing") maximize_container(focused_container, focused_workspace) end elseif #containers > 1 and maximized_container then -- debug_notify("Shrinking") scroll.command(maximized_container.container, "set_size h " .. maximized_container.wf) scroll.command(maximized_container.container, "set_size v " .. maximized_container.hf) maximized_containers[focused_workspace] = nil scroll.state_set_value(state, "maximized_containers", maximized_containers) end scroll.command(focused_container, "nop") end scroll.add_callback("view_focus", maximize_when_only, nil)