diff --git a/.config/hypr/workspaces.lua b/.config/hypr/workspaces.lua index 0be8c34..757810f 100644 --- a/.config/hypr/workspaces.lua +++ b/.config/hypr/workspaces.lua @@ -12,21 +12,17 @@ local function setup_monitors() local monitors = hl.get_monitors() local monitor_count = #monitors - -- Move active window to a workspace with SUPER + SHIFT + [1-5] for i = 1, #workspace_map do for j = monitor_count, 1, -1 do local monitor = monitors[j] - -- local workspace_id = "name:" .. workspace_map[i] .. "_" .. j - local workspace_id = (i - 1) * monitor_count + j local workspace_name = workspace_map[i] .. '_' .. j hl.workspace_rule { - -- workspace = (i - 1) * monitor_count + j, - -- default_name = workspace_name, workspace = 'name:' .. workspace_name, monitor = monitor.name, default = i == 1, } + -- Move to a workspace with SUPER + [1-5] hl.bind( 'SUPER + code:1' .. (i - 1), hl.dsp.focus { workspace = 'name:' .. workspace_name }, @@ -34,6 +30,7 @@ local function setup_monitors() ) end + -- Move active window to a workspace with SUPER + SHIFT + [1-5] hl.bind('SUPER + SHIFT + code:1' .. (i - 1), function() notify('Moving', 2000) local active_window = hl.get_active_window() @@ -58,6 +55,27 @@ local function setup_monitors() description = 'Move window to workspace ' .. workspace_map[i], }) end + + -- When removing a monitor move all windows to existing monitors + local windows = hl.get_windows() + for i = 1, #windows do + local window = windows[i] + if window and window.workspace then + local workspace_name = window.workspace.name + local monitor_suffix = workspace_name:match '_(%d+)$' or '0' + if tonumber(monitor_suffix) > monitor_count then + local new_workspace = 'name:' + .. workspace_name:match '^%w+' + .. '_1' + + hl.dispatch(hl.dsp.window.move { + workspace = new_workspace, + window = window, + follow = false, + }) + end + end + end end hl.on('monitor.added', setup_monitors)