Last active
February 13, 2020 15:47
-
-
Save tadly/dac20bf5e1c588599ef8fd54de89b2b1 to your computer and use it in GitHub Desktop.
Allows to quickly swap two workspaces with one another.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# | |
# Allows to quickly swap two workspaces with one another. | |
# | |
# Requirements: | |
# i3, jq | |
# | |
# i3 config example: | |
# set $exec_nsi exec --no-startup-id | |
# | |
# set $swapper path/to/swapper.sh | |
# set $swapper_mode Workspace swapper | |
# bindsym $mod+s mode "$swapper" | |
# mode "$swapper_mode" { | |
# bindsym 1 $exec_nsi $swapper $ws1; mode "default" | |
# bindsym 2 $exec_nsi $swapper $ws2; mode "default" | |
# bindsym 3 $exec_nsi $swapper $ws3; mode "default" | |
# bindsym 4 $exec_nsi $swapper $ws4; mode "default" | |
# bindsym 5 $exec_nsi $swapper $ws5; mode "default" | |
# bindsym 6 $exec_nsi $swapper $ws6; mode "default" | |
# bindsym 7 $exec_nsi $swapper $ws7; mode "default" | |
# bindsym 8 $exec_nsi $swapper $ws8; mode "default" | |
# bindsym 9 $exec_nsi $swapper $ws9; mode "default" | |
# bindsym 0 $exec_nsi $swapper $ws0; mode "default" | |
# | |
# bindsym Return mode "default" | |
# bindsym Escape mode "default" | |
# } | |
# Path to jq binary. Can be obtained from: | |
# https://stedolan.github.io/jq/ | |
JQ_BIN='./jq' | |
# Name used for a temporary workspace while swapping. | |
WS_TMP="_tmp_" | |
cd "$(dirname "$0")" | |
ws_target="$1" | |
if [ -z "$ws_target" ]; then | |
echo "usage: $0 [target]" | |
exit 1 | |
fi | |
# Get all workspaces | |
workspaces="$(i3-msg -t get_workspaces)" | |
# Get current workspace | |
ws_current=$(echo "$workspaces" | \ | |
$JQ_BIN -r '.[] | select(.focused == true).name') | |
# Check if moving to same workspace | |
if [ "$ws_target" == "$ws_current" ]; then | |
exit 0 | |
fi | |
# Check if the target workspace already exists | |
to_node=$(echo "$workspaces" | \ | |
$JQ_BIN -r ".[] | select(.name == \"$ws_target\")") | |
# Either swap current with target or simply rename current | |
if [ -z "$to_node" ]; then | |
i3-msg "rename workspace to \"$ws_target\"" | |
else | |
i3-msg "rename workspace \"$ws_current\" to \"$WS_TMP\"" | |
i3-msg "rename workspace \"$ws_target\" to \"$ws_current\"" | |
i3-msg "rename workspace \"$WS_TMP\" to \"$ws_target\"" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment