hypr: add keyboard navigation for hyprtasking overview
This commit is contained in:
@@ -88,8 +88,25 @@ function M.setup(ctx)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function setup_window_overview_bindings()
|
local function setup_window_overview_bindings()
|
||||||
|
local function hyprtasking_loaded()
|
||||||
|
return hl.plugin and hl.plugin.hyprtasking and hl.plugin.hyprtasking.toggle
|
||||||
|
end
|
||||||
|
|
||||||
|
local function hyprtasking_active()
|
||||||
|
return hyprtasking_loaded()
|
||||||
|
and hl.plugin.hyprtasking.is_active
|
||||||
|
and hl.plugin.hyprtasking.is_active()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Workspace the overview was opened from, so Escape can cancel back to it
|
||||||
|
-- (hyprtasking:move switches the active workspace live as you navigate).
|
||||||
|
local hyprtasking_origin_workspace = nil
|
||||||
|
|
||||||
local function toggle_hyprtasking()
|
local function toggle_hyprtasking()
|
||||||
if hl.plugin and hl.plugin.hyprtasking and hl.plugin.hyprtasking.toggle then
|
if hyprtasking_loaded() then
|
||||||
|
if not hyprtasking_active() then
|
||||||
|
hyprtasking_origin_workspace = hl.get_active_workspace()
|
||||||
|
end
|
||||||
hl.plugin.hyprtasking.toggle("cursor")
|
hl.plugin.hyprtasking.toggle("cursor")
|
||||||
else
|
else
|
||||||
hl.notification.create({
|
hl.notification.create({
|
||||||
@@ -102,6 +119,38 @@ function M.setup(ctx)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Directional keyboard navigation; only acts while the overview is open so
|
||||||
|
-- the arrow keys keep their normal meaning otherwise. The active-border
|
||||||
|
-- highlight follows the selection.
|
||||||
|
local function hyprtasking_move(direction)
|
||||||
|
return function()
|
||||||
|
if hyprtasking_active() and hl.plugin.hyprtasking.move then
|
||||||
|
hl.plugin.hyprtasking.move(direction)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Confirm: close the overview, staying on the highlighted workspace.
|
||||||
|
local function hyprtasking_confirm()
|
||||||
|
if hyprtasking_active() then
|
||||||
|
hl.plugin.hyprtasking.toggle("cursor")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Cancel: restore the origin workspace, then close.
|
||||||
|
local function hyprtasking_cancel()
|
||||||
|
if not hyprtasking_active() then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if hyprtasking_origin_workspace and hyprtasking_origin_workspace.id then
|
||||||
|
dispatch(hl.dsp.focus({
|
||||||
|
workspace = tostring(hyprtasking_origin_workspace.id),
|
||||||
|
on_current_monitor = true,
|
||||||
|
}))
|
||||||
|
end
|
||||||
|
hl.plugin.hyprtasking.toggle("cursor")
|
||||||
|
end
|
||||||
|
|
||||||
bind(main_mod .. " + SHIFT + C", hl.dsp.window.close(), desc("Close active window"))
|
bind(main_mod .. " + SHIFT + C", hl.dsp.window.close(), desc("Close active window"))
|
||||||
bind(main_mod .. " + SHIFT + Q", hl.dsp.exit(), desc("Exit Hyprland"))
|
bind(main_mod .. " + SHIFT + Q", hl.dsp.exit(), desc("Exit Hyprland"))
|
||||||
bind(main_mod .. " + Tab", toggle_hyprtasking, desc("Toggle hyprtasking workspace overview", overview_bind_opts))
|
bind(main_mod .. " + Tab", toggle_hyprtasking, desc("Toggle hyprtasking workspace overview", overview_bind_opts))
|
||||||
@@ -113,6 +162,12 @@ function M.setup(ctx)
|
|||||||
}), desc("Show all-workspace window overview", overview_bind_opts))
|
}), desc("Show all-workspace window overview", overview_bind_opts))
|
||||||
bind(main_mod .. " + SHIFT + slash", hyprwinview({ action = "toggle-filter" }), desc("Toggle window overview filter", overview_bind_opts))
|
bind(main_mod .. " + SHIFT + slash", hyprwinview({ action = "toggle-filter" }), desc("Toggle window overview filter", overview_bind_opts))
|
||||||
bind("ALT + Tab", toggle_hyprtasking, desc("Toggle hyprtasking workspace overview", overview_bind_opts))
|
bind("ALT + Tab", toggle_hyprtasking, desc("Toggle hyprtasking workspace overview", overview_bind_opts))
|
||||||
|
bind(main_mod .. " + Left", hyprtasking_move("left"), desc("Overview: select workspace left", overview_bind_opts))
|
||||||
|
bind(main_mod .. " + Down", hyprtasking_move("down"), desc("Overview: select workspace down", overview_bind_opts))
|
||||||
|
bind(main_mod .. " + Up", hyprtasking_move("up"), desc("Overview: select workspace up", overview_bind_opts))
|
||||||
|
bind(main_mod .. " + Right", hyprtasking_move("right"), desc("Overview: select workspace right", overview_bind_opts))
|
||||||
|
bind(main_mod .. " + Return", hyprtasking_confirm, desc("Overview: confirm selected workspace", overview_bind_opts))
|
||||||
|
bind("Escape", hyprtasking_cancel, desc("Overview: cancel back to origin workspace", { non_consuming = true }))
|
||||||
bind(main_mod .. " + G", hyprwinview({
|
bind(main_mod .. " + G", hyprwinview({
|
||||||
action = "show",
|
action = "show",
|
||||||
start_in_filter_mode = true,
|
start_in_filter_mode = true,
|
||||||
@@ -131,18 +186,23 @@ function M.setup(ctx)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function setup_window_focus_and_move_bindings()
|
local function setup_window_focus_and_move_bindings()
|
||||||
bind(main_mod .. " + W", function()
|
-- While the hyprtasking overview is open, WASD navigates the workspace grid;
|
||||||
focus_direction("up")
|
-- otherwise it keeps its normal directional window-focus behavior.
|
||||||
end, desc("Focus window above"))
|
local function focus_or_overview_move(direction)
|
||||||
bind(main_mod .. " + S", function()
|
return function()
|
||||||
focus_direction("down")
|
if hl.plugin and hl.plugin.hyprtasking and hl.plugin.hyprtasking.is_active
|
||||||
end, desc("Focus window below"))
|
and hl.plugin.hyprtasking.is_active() and hl.plugin.hyprtasking.move then
|
||||||
bind(main_mod .. " + A", function()
|
hl.plugin.hyprtasking.move(direction)
|
||||||
focus_direction("left")
|
else
|
||||||
end, desc("Focus window to the left"))
|
focus_direction(direction)
|
||||||
bind(main_mod .. " + D", function()
|
end
|
||||||
focus_direction("right")
|
end
|
||||||
end, desc("Focus window to the right"))
|
end
|
||||||
|
|
||||||
|
bind(main_mod .. " + W", focus_or_overview_move("up"), desc("Focus window above / overview up"))
|
||||||
|
bind(main_mod .. " + S", focus_or_overview_move("down"), desc("Focus window below / overview down"))
|
||||||
|
bind(main_mod .. " + A", focus_or_overview_move("left"), desc("Focus window left / overview left"))
|
||||||
|
bind(main_mod .. " + D", focus_or_overview_move("right"), desc("Focus window right / overview right"))
|
||||||
|
|
||||||
bind(main_mod .. " + SHIFT + W", function()
|
bind(main_mod .. " + SHIFT + W", function()
|
||||||
swap_direction("up")
|
swap_direction("up")
|
||||||
|
|||||||
Reference in New Issue
Block a user