Move windows to existing monitors

This commit is contained in:
2026-09-29 17:15:31 +01:00
parent 015118d74a
commit 657851bc02
+23 -5
View File
@@ -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)