feat: Begin incorporating utility scripts into windowctl

This commit is contained in:
2025-10-07 08:37:52 -04:00
parent 7024182f49
commit 931903d18c
2 changed files with 69 additions and 54 deletions

View File

@@ -16,7 +16,7 @@ should_go_back="0"
if [[ $# == 1 ]]; then
address="$1"
else
# If an address not supplied then read from stdin, which allows us to pipe into
# If an address not supplied then read from stdin, which allows us to pipe the address into
# this command.
read -r address
fi
@@ -44,8 +44,10 @@ hypr_dispatch() {
focus_window() {
log "Focusing window, selection: $address"
local name=$(hyprctl clients -j | jq -r ".[] | select(.address == \"$address\") | .workspace.name")
local active_workspace=$(hyprctl activewindow -j | jq -r ".workspace.name")
log "Window workspace: '$name', active workspace: '$active_workspace'"
if [[ $name =~ ^special ]] && [[ ! $active_workspace == $name ]]; then
log "Toggling special workspace prior to focusing window."
@@ -91,7 +93,60 @@ move_to_workspace() {
xargs -I{} hyprctl dispatch "$action" "{},address:$address" >/dev/null 2>&1
return $?
}
make_selection() {
log "Prompting for window action..."
local choices=(
"Focus the selected window.:Focus window"
"Close the selected window.:Close window"
"Close the selected window and go back to the window list.:Close window and back"
"Move the selected window to another workspace, focusing the window.\n\nA workspace picker will be presented to choose which workspace to move to.:Move to workspace"
"Move the selected window to another workspace, without focusing the window.\n\nA workspace picker will be presented to choose which workspace to move to.:Move to workspace - silent"
"Copy the window address to the system clipboard:Copy to clipboard"
"Move back to window picker and reload windows.:Back"
"Quit:Quit"
)
local preview_action="$SCRIPTS/hypr/preview-stats window $address \"{title, workspace, address}\""
local choice=$(
printf "%s\n" "${choices[@]}" |
fzf --style=full --footer="$(action_footer)" \
--delimiter=':' --with-nth=2 \
--header="What should we do with the selected window?" \
--preview-label="[ Description ]" \
--preview="echo -e {1}; echo -e '\n\n\e[35mSelected Window:\e[0m'; $preview_action;"
)
# Exit if non-zero code returned from making selection.
[[ $? -gt 0 ]] && log --error "Unexpected fzf status: $?" && exit $?
# Set choice to just the action portion.
choice="${choice#*:}"
echo "$choice"
}
# Set appropriate flags based on the choice and perform the action on the window address.
handle_selection() {
local choice=""
read -r choice
log "Action Choice: $choice"
if [[ $choice == "Quit" ]]; then
exit 0
elif [[ $choice == "Close window" ]]; then
"$SCRIPTS/hypr/close-windows" "$address"
elif [[ $choice == "Close window and back" ]]; then
"$SCRIPTS/hypr/close-windows" "$address"
should_go_back="1"
elif [[ $choice == "Copy to clipboard" ]]; then
echo $address | wl-copy
elif [[ $choice == "Focus window" ]]; then
focus_window
elif [[ $choice == "Move to workspace" ]]; then
move_to_workspace
elif [[ $choice == "Move to workspace - silent" ]]; then
move_silent_flag="1"
move_to_workspace
elif [[ $choice == "Back" ]]; then
should_go_back="1"
fi
}
################################################################################
@@ -107,56 +162,7 @@ if [[ -z $address ]]; then
exit 1
fi
log "Prompting for window action..."
choices=(
"Focus the selected window.:Focus window"
"Close the selected window.:Close window"
"Close the selected window and go back to the window list.:Close window and back"
"Move the selected window to another workspace, focusing the window.\n\nA workspace picker will be presented to choose which workspace to move to.:Move to workspace"
"Move the selected window to another workspace, without focusing the window.\n\nA workspace picker will be presented to choose which workspace to move to.:Move to workspace - silent"
"Copy the window address to the system clipboard:Copy to clipboard"
"Move back to window picker and reload windows.:Back"
"Quit:Quit"
)
preview_action="$SCRIPTS/hypr/preview-stats window $address \"{title, workspace, address}\""
choice=$(
printf "%s\n" "${choices[@]}" |
fzf --style=full --footer="$(action_footer)" \
--delimiter=':' --with-nth=2 \
--header="What should we do with the selected window?" \
--preview-label="[ Description ]" \
--preview="echo -e {1}; echo -e '\n\n\e[35mSelected Window:\e[0m'; $preview_action;"
)
if [[ $? -gt 0 ]]; then
log --error "Unexpected fzf status: $?"
exit $?
fi
# Set choice to just the action portion.
choice="${choice#*:}"
log "Action Choice: $choice"
# Set appropriate flags based on the choice and perform the action on the window address.
if [[ $choice == "Quit" ]]; then
exit 0
elif [[ $choice == "Close window" ]]; then
"$SCRIPTS/hypr/close-windows" "$address"
elif [[ $choice == "Close window and back" ]]; then
"$SCRIPTS/hypr/close-windows" "$address"
should_go_back="1"
elif [[ $choice == "Copy to clipboard" ]]; then
echo $address | wl-copy
elif [[ $choice == "Focus window" ]]; then
focus_window
elif [[ $choice == "Move to workspace" ]]; then
move_to_workspace
elif [[ $choice == "Move to workspace - silent" ]]; then
move_silent_flag="1"
move_to_workspace
elif [[ $choice == "Back" ]]; then
should_go_back="1"
fi
make_selection | handle_selection
# TODO: Maybe we just echo out a 'back' message.
if [[ $should_go_back == "1" ]]; then