blob: a4e4745150467eaad29eff73fcc02a22ea18b9a3 (
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#!/bin/bash
current_workspace() {
wmctrl -d | awk '{print $1" "$2}' | grep "*" | awk '{print $1}'
}
workspace_exists() {
wmctrl -d | awk '{print $1}' | grep -w -- "${1}"
}
workspace_windows() {
wmctrl -l | {
while IFS= read -r line; do
local parts=($line)
local id="${parts[@]:0:1}"
local workspace=${parts[@]:1:1}
if [[ "$workspace" != "$1" ]]; then
continue
fi
echo "$id"
done
}
}
move_window() {
wmctrl -i -r "$1" -t "$2"
}
usage() {
cat <<-_EOF
A program to move all windows from workspace <1> to workspace <2> and
vice versa.
If the first workspace number is not specified, current workspace is assumed.
Workspace numbering starts with 0.
This is useful when you want to reorder workspaces but your DE doesn't have such
feature.
Usage:
$(basename "$0") [<1>] <2>
Dependencies:
wmctrl
_EOF
}
FROM=$1
TO=$2
if [ ! -x "$(command -v wmctrl)" ]; then
echo "Please make sure that wmctrl is installed."
exit 1
fi
if [ -z "$TO" ]; then
if [ -z "$FROM" ]; then
echo "$USAGE"
exit 1
fi
TO="$FROM"
FROM=$(current_workspace)
fi
if [ "$FROM" == "$TO" ]; then
exit
fi
if [[ ! $(workspace_exists "$FROM") ]]; then
echo "workspace $FROM not found"
exit 1
elif [[ ! $(workspace_exists "$TO") ]]; then
echo "workspace $TO not found"
exit 1
fi
WINDOWS_FROM=($(workspace_windows "$FROM"))
WINDOWS_TO=($(workspace_windows "$TO"))
for id in "${WINDOWS_FROM[@]}"; do
move_window "$id" "$TO"
done
for id in "${WINDOWS_TO[@]}"; do
move_window "$id" "$FROM"
done
|