diff options
| author | srdusr <trevorgray@srdusr.com> | 2024-02-29 23:56:53 +0200 |
|---|---|---|
| committer | srdusr <trevorgray@srdusr.com> | 2024-02-29 23:56:53 +0200 |
| commit | 4cc8c614458647a574a0c116e2f4ac98be36d883 (patch) | |
| tree | 27ccbb413c053f27950559946fdb759f474d6849 /.config | |
| parent | c6aa1cbb61c69b1a096b00f99534f67f80171e33 (diff) | |
| download | dotfiles-4cc8c614458647a574a0c116e2f4ac98be36d883.tar.gz dotfiles-4cc8c614458647a574a0c116e2f4ac98be36d883.zip | |
Add bspwm script drag-float
Diffstat (limited to '.config')
| -rwxr-xr-x | .config/bspwm/scripts/drag-float | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/.config/bspwm/scripts/drag-float b/.config/bspwm/scripts/drag-float new file mode 100755 index 0000000..788e978 --- /dev/null +++ b/.config/bspwm/scripts/drag-float @@ -0,0 +1,42 @@ +#!/bin/env bash + +: "${BUTTON:=1}" + +node="$(bspc query -N -n pointed)" + +die() { + jobs -p | xargs -r -n1 -I{} kill {} + exit +} + +trap 'die' USR1 + +{ bspc subscribe node_focus | while read -r _ _ _ wid; do + (( wid != node )) && break; done; kill -USR1 "$$" ;} & +{ while xinput list \ + | sed -nE 's,.*id=([0-9]+).*slave\s+pointer.*,\1,p' \ + | xargs -r -n1 -I{} xinput query-state {} 2> /dev/null \ + | grep -qF "button[${BUTTON}]=down"; do sleep .3; done; kill -USR1 "$$" ;} & + +if bspc node "$node.tiled" -f; then + 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" +elif bspc node "$node.floating" -f; then + : +else + die +fi + +eval "$(xdotool getmouselocation --shell)" +x="$X" y="$Y" +while :; do + eval "$(xdotool getmouselocation --shell)" + (( X != x || Y != y )) && { + bspc node "$node" -v "$((X - x))" "$((Y - y))" + x="$X" y="$Y" + } +done + +wait |
