aboutsummaryrefslogtreecommitdiff
path: root/dotfiles/scripts/switch-workspace.py
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/scripts/switch-workspace.py')
-rwxr-xr-xdotfiles/scripts/switch-workspace.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/dotfiles/scripts/switch-workspace.py b/dotfiles/scripts/switch-workspace.py
new file mode 100755
index 0000000..d311c46
--- /dev/null
+++ b/dotfiles/scripts/switch-workspace.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+from json import loads
+from os import popen
+from sys import argv
+
+def ipc_query(req="command", msg=""):
+ ans = popen("i3-msg -t " + req + " " + msg).readlines()[0]
+ return loads(ans)
+
+if __name__ == "__main__":
+ # Usage & checking args
+ if len(argv) != 2:
+ print ("Usage: switch-workspace.py name-of-workspace")
+ exit(-1)
+
+ newworkspace = argv[1]
+
+ # Retrieving active display
+ active_display = None
+ old_display = None
+ for w in ipc_query(req="get_workspaces"):
+ if w['focused']:
+ active_display = w['output']
+ if w['name'] == newworkspace:
+ old_display = w['output']
+ if newworkspace.isdigit() and w['num'] == int(newworkspace):
+ old_display = w['output']
+ print (w)
+
+ # Pre-computing commands
+ if newworkspace.isdigit():
+ cmd_show = "workspace number " + newworkspace
+ else:
+ cmd_show = "workspace " + newworkspace
+ cmd_move = "move workspace to output " + active_display
+
+ # Moving workspace to active display
+ if active_display == old_display:
+ print (cmd_show)
+ print (ipc_query(msg=cmd_show))
+ else:
+ cmd="'" + cmd_show + ";" + cmd_move + ";" + cmd_show + "'"
+ print (cmd)
+ print (ipc_query(msg=cmd))