aboutsummaryrefslogtreecommitdiff
path: root/.config/bspwm
diff options
context:
space:
mode:
authorsrdusr <trevorgray@srdusr.com>2024-03-21 23:55:40 +0200
committersrdusr <trevorgray@srdusr.com>2024-03-21 23:55:40 +0200
commit853d2c4f9e80be0f6915757bfe1a8a49058deece (patch)
treef44f93bbf49e2a5b70902df7f291f918e610e8d0 /.config/bspwm
parente35c29ef97d4845aec435dcf0fbb72a3d1329d4c (diff)
downloaddotfiles-853d2c4f9e80be0f6915757bfe1a8a49058deece.tar.gz
dotfiles-853d2c4f9e80be0f6915757bfe1a8a49058deece.zip
Add bspdragtofloat
Diffstat (limited to '.config/bspwm')
-rwxr-xr-x.config/bspwm/scripts/bspdragtofloat46
1 files changed, 46 insertions, 0 deletions
diff --git a/.config/bspwm/scripts/bspdragtofloat b/.config/bspwm/scripts/bspdragtofloat
new file mode 100755
index 0000000..e2f88a2
--- /dev/null
+++ b/.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"