blob: e2f88a2341926f49e277327bf7fceee8426d9d8e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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"
|