diff --git a/env/.local/scripts/hypr/windowctl b/env/.local/scripts/hypr/windowctl index 33f1470..e0e7b9a 100755 --- a/env/.local/scripts/hypr/windowctl +++ b/env/.local/scripts/hypr/windowctl @@ -16,16 +16,16 @@ USAGE: OPTIONS: - --launch: Launch in a new terminal window, user will be prompted what to do with selected window. - -c | --clip: Copy selected window's address to the system clipboard. - -x | --close: Close the selected window. - -f | --focus: Focus the selected window. - -i | --ignore: Ignore the selected window. - -m | --move: Move the selected window to another workspace and switch to that workspace. - -s | --silent-move: Move the selected window to another workspace and remain on current workspace. - -t | --to-workspace: Used with one of the move options to set which workspace to move to. If not supplied - then we will prompt for a workspace to move to. - -h | --help: Show this page. + --launch: Launch in a new terminal window, user will be prompted what to do with selected window. + -c | --clip: Copy selected window's address to the system clipboard. + -x | --close
: Close the selected window. + -f | --focus
: Focus the selected window, if optional address is supplied then we focus it. + -i | --ignore: Ignore the selected window. + -m | --move
: Move the selected window to another workspace and switch to that workspace. + -s | --silent-move
: Move the selected window to another workspace and remain on current workspace. + -t | --to-workspace : Used with one of the move options to set which workspace to move to. If not supplied + then we will prompt for a workspace to move to. + -h | --help: Show this page. NOTES: @@ -61,17 +61,25 @@ while [[ $# -gt 0 ]]; do clipboard_flag="1" elif [[ $1 =~ ^-x ]] || [[ $1 =~ ^--close ]]; then close_flag="1" + selected_value=$2 + shift elif [[ $1 =~ ^-f ]] || [[ $1 =~ ^--focus ]]; then focus_flag="1" + selected_value=$2 + shift elif [[ $1 =~ ^-h ]] || [[ $1 =~ ^--help ]]; then usage && exit 0 elif [[ $1 =~ ^-i ]] || [[ $1 =~ ^--ignore ]]; then ignore_flag="1" elif [[ $1 =~ ^-m ]] || [[ $1 =~ ^--move ]]; then move_flag="1" + selected_value=$2 + shift elif [[ $1 =~ ^-s ]] || [[ $1 =~ ^--silent-move ]]; then move_flag="1" move_silent_flag="1" + selected_value=$2 + shift elif [[ $1 =~ ^-t ]] || [[ $1 =~ ^--to-workspace ]]; then shift move_to_workspace_name=$1 @@ -114,6 +122,8 @@ ask_what_to_do_with_selection() { --preview-label="[ Description ]" \ --preview='echo -e {1}' ) + # Set choice to just the action portion. + choice="${choice#*:}" log "Choice: $choice" if [[ $choice == "Quit" ]]; then exit 0 @@ -176,6 +186,20 @@ move_to_workspace() { hypr_dispatch $action "$workspace_id,address:$selected_value" } +focus_window() { + log "Focusing window, selection: $selected_value" + local address="$selected_value" + 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." + name="${name#special:*}" + hypr_dispatch togglespecialworkspace $name + fi + hypr_dispatch focuswindow "address:$address" +} + handle_selected_value() { if [[ $ignore_flag == "1" ]]; then log "Ignore flag set, selection: '$selected_value'" @@ -185,9 +209,9 @@ handle_selected_value() { wl-copy $selected_value exit 0 elif [[ $focus_flag == "1" ]]; then - log "Focusing window, selection: $selected_value" - hypr_dispatch focuswindow "address:$selected_value" - exit 0 + # log "Focusing window, selection: $selected_value" + # hypr_dispatch focuswindow "address:$selected_value" + focus_window && exit 0 elif [[ $close_flag == "1" ]]; then log "Closing window, selection: $selected_value" hypr_dispatch closewindow "address:$selected_value" @@ -207,6 +231,8 @@ handle_selected_value() { source "$SCRIPTS/hypr/logging" setup-logging "/tmp/$THIS.log" "$THIS" +log "Starting with selected value: '$selected_value'" + if [[ $launch_flag == "1" ]]; then ghostty --class="$window_class" --window-padding-x="$window_padding_x" \ --keybind="ctrl+c=quit" \ @@ -218,7 +244,10 @@ else [[ -f $SCRIPTS/catppuccin-colors ]] && source $SCRIPTS/catppuccin-colors - selected_value=$("$SCRIPTS/hypr/window-picker") + if [[ -z $selected_value ]]; then + selected_value=$("$SCRIPTS/hypr/window-picker") + fi + if [[ -n $selected_value ]]; then handle_selected_value # If we got here then no flag was passed in initially on how to handle the