add script, update readme

This commit is contained in:
ch1p 2017-08-29 02:41:32 +03:00
parent 16af2713de
commit 418727e513
2 changed files with 75 additions and 0 deletions

View File

@ -1 +1,5 @@
# swap_workspaces
This is a simple bash script to swap all windows between two workspaces on Linux.
This may be useful when you want to change the order of the workspaces but your DE doesn't have such feature (XFCE as an example).

71
swap_workspaces Executable file
View File

@ -0,0 +1,71 @@
#!/bin/bash
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="A program to move all windows from workspace <1> to workspace <2> and
vice versa.
This is useful when you want to reorder workspaces but your DE doesn't have such
feature (XFCE as an example).
Usage:
$(basename "$0") <1> <2>
Dependencies:
wmctrl"
FROM=$1
TO=$2
if [ ! -x "$(command -v wmctrl)" ]; then
echo "Please make sure that wmctrl is installed."
exit 1
fi
if [ -z "$FROM" ] || [ -z "$TO" ]; then
echo "$USAGE"
exit 1
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