diff options
-rw-r--r-- | README.md | 4 | ||||
-rwxr-xr-x | swap_workspaces | 71 |
2 files changed, 75 insertions, 0 deletions
@@ -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). diff --git a/swap_workspaces b/swap_workspaces new file mode 100755 index 0000000..f7c8185 --- /dev/null +++ b/swap_workspaces @@ -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 |