aboutsummaryrefslogtreecommitdiff
path: root/linux/home/.config/bspwm/scripts/bspdragtofloat
diff options
context:
space:
mode:
authorsrdusr <trevorgray@srdusr.com>2025-08-30 19:22:59 +0200
committersrdusr <trevorgray@srdusr.com>2025-08-30 19:22:59 +0200
commit19120d4f9761c67d99ed1ce3da6084b83f5a49c9 (patch)
treef234cad1bdad88114a63c9702144da487024967a /linux/home/.config/bspwm/scripts/bspdragtofloat
parent5928998af5404ae2be84c6cecc10ebf84bd3f3ed (diff)
downloaddotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.tar.gz
dotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.zip
Linux-specific dotfiles
Diffstat (limited to 'linux/home/.config/bspwm/scripts/bspdragtofloat')
-rwxr-xr-xlinux/home/.config/bspwm/scripts/bspdragtofloat46
1 files changed, 46 insertions, 0 deletions
diff --git a/linux/home/.config/bspwm/scripts/bspdragtofloat b/linux/home/.config/bspwm/scripts/bspdragtofloat
new file mode 100755
index 0000000..e2f88a2
--- /dev/null
+++ b/linux/home/.config/bspwm/scripts/bspdragtofloat
@@ -0,0 +1,46 @@
+#!/bin/env bash
+
+: "${BSPWM_DIR:="${XDG_CONFIG_HOME:-$HOME/.config}/bspwm"}"
+
+status_file="$BSPWM_DIR/tmp/drag_to_float"
+
+[[ "$1" = stop ]] && {
+ [[ -e "$status_file" ]] \
+ && rm -r -- "$status_file"
+ exit
+}
+
+[[ -e "$status_file" ]] \
+ && exit
+
+< <(bspc query -T -n pointed.window | jq -r '"\(.id) \(.client.state)"') read -r node node_state
+
+[[ -z "$node" ]] \
+ && exit
+
+case "$node_state" in
+ floating)
+ ;;
+ tiled|pseudo_tiled)
+ node_tiled_rect=($(bspc query -T -n "$node" | jq -r '.client.tiledRectangle[]'))
+ bspc node "$node" -t floating
+ xdo move -x "${node_tiled_rect[0]}" -y "${node_tiled_rect[1]}" "$node"
+ xdo resize -w "${node_tiled_rect[2]}" -h "${node_tiled_rect[3]}" "$node" ;;
+ *) # fullscreen
+ exit ;;
+esac
+
+eval "$(xdotool getmouselocation --shell)"
+x="$X" y="$Y"
+touch -- "$status_file"
+while [[ -e "$status_file" ]]; do
+ eval "$(xdotool getmouselocation --shell)"
+ (( X != x || Y != y )) && {
+ bspc node "$node" -v "$((X - x))" "$((Y - y))"
+ x="$X" y="$Y"
+ }
+ sleep .01
+done
+
+[[ -e "$status_file" ]] \
+ && rm -r -- "$status_file"