mirror of
https://github.com/m-housh/dotfiles.git
synced 2026-02-14 14:12:41 +00:00
feat: Updates windowctl subcommands, fixes some logging bugs. Need to remove old files and update keybinds to use windowctl subcommands.
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
# Allows script name to be set when called from a parent script or defaults to filename.
|
||||
@@ -98,6 +102,10 @@ close() {
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_LABEL"
|
||||
|
||||
84
env/.local/scripts/hypr/utils/windows/focus-window
vendored
Executable file
84
env/.local/scripts/hypr/utils/windows/focus-window
vendored
Executable file
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-"/tmp/$LOG_LABEL.log"}
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Focuses a window, properly handling windows in special workspaces. If no address is supplied,
|
||||
then we will read address from stdin.
|
||||
|
||||
USAGE:
|
||||
|
||||
$ $THIS <flags> <address>
|
||||
|
||||
FLAGS:
|
||||
-h | --help: Show this help page.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
# Prevent hyprctl dispatch calls from printing to the console.
|
||||
hypr_dispatch() {
|
||||
hyprctl dispatch "$@" >/dev/null 2>&1
|
||||
return $?
|
||||
}
|
||||
|
||||
focus_window() {
|
||||
local address=$1
|
||||
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."
|
||||
name="${name#special:*}"
|
||||
hypr_dispatch togglespecialworkspace $name
|
||||
fi
|
||||
hypr_dispatch focuswindow "address:$address"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
address=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
||||
usage && exit 0
|
||||
else
|
||||
address=$1
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if [[ -z $address ]]; then
|
||||
log "Reading address from stdin."
|
||||
# If an address not supplied then read from stdin, which allows us to pipe the address into
|
||||
# this command.
|
||||
read -p "Window address: " address
|
||||
fi
|
||||
|
||||
if [[ -z $address ]]; then
|
||||
log --error "No address supplied." && exit 1
|
||||
fi
|
||||
|
||||
focus_window $address && exit $?
|
||||
@@ -7,6 +7,7 @@ set -o pipefail
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
LOG_FILE=${LOG_FILE:-"/tmp/$LOG_LABEL.log"}
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
|
||||
address=""
|
||||
@@ -17,7 +18,7 @@ if [[ $# == 1 ]]; then
|
||||
else
|
||||
# If an address not supplied then read from stdin, which allows us to pipe the address into
|
||||
# this command.
|
||||
read -r address
|
||||
read -p "Window address: " address
|
||||
fi
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
@@ -41,21 +42,6 @@ hypr_dispatch() {
|
||||
return $?
|
||||
}
|
||||
|
||||
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."
|
||||
name="${name#special:*}"
|
||||
hypr_dispatch togglespecialworkspace $name
|
||||
fi
|
||||
hypr_dispatch focuswindow "address:$address"
|
||||
}
|
||||
|
||||
parse_workspace_id() {
|
||||
local workspace_name=""
|
||||
read -r workspace_name
|
||||
@@ -141,7 +127,7 @@ handle_selection() {
|
||||
log "Copied window address to the clipboard."
|
||||
echo $address | wl-copy
|
||||
elif [[ $choice == "Focus window" ]]; then
|
||||
focus_window
|
||||
"$SCRIPTS/hypr/utils/windows/focus-window" $address
|
||||
elif [[ $choice == "Move to workspace" ]]; then
|
||||
move_to_workspace
|
||||
elif [[ $choice == "Move to workspace - silent" ]]; then
|
||||
@@ -162,7 +148,7 @@ handle_selection() {
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_LABEL"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
if [[ -z $address ]]; then
|
||||
log --error "Address not set."
|
||||
|
||||
97
env/.local/scripts/hypr/utils/windows/windowctl-picker
vendored
Executable file
97
env/.local/scripts/hypr/utils/windows/windowctl-picker
vendored
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL=$(basename "$THIS_FILE")
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-"/tmp/$LOG_LABEL.log"}
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
|
||||
Shows a window picker and window details, then prompts for an action that can be
|
||||
performed on the selected window.
|
||||
|
||||
USAGE:
|
||||
|
||||
$ $THIS <flags>
|
||||
|
||||
FLAGS:
|
||||
-h | --help: Show this page.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
handle_selected_value() {
|
||||
local selection=""
|
||||
read -r selection
|
||||
|
||||
if [[ -z $selection ]]; then
|
||||
log "No selected value."
|
||||
return 1
|
||||
fi
|
||||
|
||||
log "Prompting for action, window: '$selection'"
|
||||
|
||||
local res=$(echo "$selection" | "$SCRIPTS/hypr/utils/windows/window-action-picker")
|
||||
log "Action callback result: $res"
|
||||
echo "$res"
|
||||
|
||||
}
|
||||
|
||||
prompt_for_window_selection() {
|
||||
local selected_value=$("$SCRIPTS/hypr/window-picker")
|
||||
local status=$?
|
||||
if [[ $status -ne 0 ]]; then
|
||||
exit $status
|
||||
fi
|
||||
echo "$selected_value"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging $LOG_FILE $LOG_LABEL
|
||||
should_quit="0"
|
||||
|
||||
log "Starting $THIS..."
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
||||
usage && exit 0
|
||||
elif [[ -n $1 ]]; then
|
||||
address=$1
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
# Load colors if they haven't been loaded already.
|
||||
[[ -z ${FZF_DEFAULT_OPTS} ]] &&
|
||||
[[ -f $SCRIPTS/catppuccin-colors ]] &&
|
||||
source $SCRIPTS/catppuccin-colors
|
||||
|
||||
trap 'log "Stoping..."; should_quit="1"' SIGINT
|
||||
|
||||
while [[ $should_quit -eq 0 ]]; do
|
||||
res=$(prompt_for_window_selection | handle_selected_value)
|
||||
|
||||
if [[ ! $res =~ ^back ]]; then
|
||||
should_quit=1
|
||||
elif [[ $res == "back:close" ]]; then
|
||||
sleep 0.3 # allow time for windows close, to prevent showing closed windows.
|
||||
fi
|
||||
|
||||
log "Should quit: $should_quit"
|
||||
done
|
||||
Reference in New Issue
Block a user