add(binds): focus between nonfloating and floaters
This commit is contained in:
@@ -27,6 +27,7 @@
|
|||||||
"SUPER, K, Move focus up, movefocus, u"
|
"SUPER, K, Move focus up, movefocus, u"
|
||||||
"SUPER, H, Move focus left, movefocus, l"
|
"SUPER, H, Move focus left, movefocus, l"
|
||||||
"SUPER, L, Move focus right, movefocus, r"
|
"SUPER, L, Move focus right, movefocus, r"
|
||||||
|
"SUPER, G, Switch Focus (Float/Tile), exec, hakase-focus-switch"
|
||||||
|
|
||||||
# move window
|
# move window
|
||||||
"SUPER SHIFT, h, Move window left, movewindow, l"
|
"SUPER SHIFT, h, Move window left, movewindow, l"
|
||||||
@@ -55,6 +56,12 @@
|
|||||||
# [Workspaces] Toggle between most recent workspaces
|
# [Workspaces] Toggle between most recent workspaces
|
||||||
"SUPER, Tab, Cycle workspaces, workspace, previous"
|
"SUPER, Tab, Cycle workspaces, workspace, previous"
|
||||||
|
|
||||||
|
# [Workspaces] Move to another workspace
|
||||||
|
"CTRL SHIFT, H, Move to previous workspace, split:workspace, -1"
|
||||||
|
"CTRL SHIFT, L, Move to next workspace, split:workspace, +1"
|
||||||
|
"CTRL SHIFT, K, Move to previous workspace, split:workspace, -1"
|
||||||
|
"CTRL SHIFT, J, Move to next workspace, split:workspace, +1"
|
||||||
|
|
||||||
# hyprspace - workspace overview
|
# hyprspace - workspace overview
|
||||||
"SUPER, E, Toggle Workspace Overview, overview:toggle"
|
"SUPER, E, Toggle Workspace Overview, overview:toggle"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -28,8 +28,28 @@
|
|||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
hakase-focus-switch = pkgs.writeShellScriptBin "hakase-focus-switch" ''
|
||||||
|
HYPRCTL="${pkgs.hyprland}/bin/hyprctl"
|
||||||
|
JQ="${pkgs.jq}/bin/jq"
|
||||||
|
|
||||||
|
workspace_id=$($HYPRCTL activeworkspace -j | $JQ '.id')
|
||||||
|
active_window=$($HYPRCTL activewindow -j)
|
||||||
|
is_floating=$(echo "$active_window" | $JQ '.floating')
|
||||||
|
|
||||||
|
if [ "$is_floating" == "true" ]; then
|
||||||
|
target_addr=$($HYPRCTL clients -j | $JQ -r --argjson ws "$workspace_id" '[.[] | select(.workspace.id == $ws and .floating == false)] | .[0].address')
|
||||||
|
else
|
||||||
|
target_addr=$($HYPRCTL clients -j | $JQ -r --argjson ws "$workspace_id" '[.[] | select(.workspace.id == $ws and .floating == true)] | .[0].address')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$target_addr" != "null" ] && [ -n "$target_addr" ]; then
|
||||||
|
$HYPRCTL dispatch focuswindow address:$target_addr
|
||||||
|
fi
|
||||||
|
'';
|
||||||
in {
|
in {
|
||||||
home.packages = [
|
home.packages = [
|
||||||
hakase-workspace-switch-force
|
hakase-workspace-switch-force
|
||||||
|
hakase-focus-switch
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Get current workspace ID
|
||||||
|
workspace_id=$(hyprctl activeworkspace -j | jq '.id')
|
||||||
|
|
||||||
|
# Get active window info
|
||||||
|
active_window=$(hyprctl activewindow -j)
|
||||||
|
is_floating=$(echo "$active_window" | jq '.floating')
|
||||||
|
|
||||||
|
echo "Current Workspace: $workspace_id"
|
||||||
|
echo "Active Window Floating: $is_floating"
|
||||||
|
|
||||||
|
if [ "$is_floating" == "true" ]; then
|
||||||
|
echo "Switching to Tiled..."
|
||||||
|
# Find a tiled window on the current workspace
|
||||||
|
# We sort by focus history or just pick the first one
|
||||||
|
target_addr=$(hyprctl clients -j | jq -r --argjson ws "$workspace_id" '[.[] | select(.workspace.id == $ws and .floating == false)] | sort_by(.focusHistoryID) | .[0].address')
|
||||||
|
else
|
||||||
|
echo "Switching to Floating..."
|
||||||
|
# Find a floating window on the current workspace
|
||||||
|
target_addr=$(hyprctl clients -j | jq -r --argjson ws "$workspace_id" '[.[] | select(.workspace.id == $ws and .floating == true)] | sort_by(.focusHistoryID) | .[0].address')
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Target Address: $target_addr"
|
||||||
|
|
||||||
|
if [ "$target_addr" != "null" ] && [ -n "$target_addr" ]; then
|
||||||
|
hyprctl dispatch focuswindow address:$target_addr
|
||||||
|
else
|
||||||
|
echo "No target window found."
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user