aboutsummaryrefslogtreecommitdiff
path: root/dotfiles/scripts/cycle-workspace-multiscreen.py
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/scripts/cycle-workspace-multiscreen.py')
-rwxr-xr-xdotfiles/scripts/cycle-workspace-multiscreen.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/dotfiles/scripts/cycle-workspace-multiscreen.py b/dotfiles/scripts/cycle-workspace-multiscreen.py
new file mode 100755
index 0000000..e5e70ef
--- /dev/null
+++ b/dotfiles/scripts/cycle-workspace-multiscreen.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+
+# cycle-workspace-multiscreen
+# Moves the currently active workspace to the left/right/top/bottom active
+# display.
+# Depends on i3-py (`pip install i3-py`)
+# Because workspace name are fixed to a display, just rename workspace can
+# change workspace to another display.
+# So for the moment this script is tested and work if workspaces are fixed
+# to a display.
+
+import i3
+import sys
+
+# figure out what is on, and what is currently on your screen.
+workspace_origin = list(filter(lambda s: s['focused'], i3.get_workspaces()))[0]
+outputs = list(filter(lambda s: s['active'], i3.get_outputs()))
+output_origin = ""
+
+for output in outputs:
+ if output['current_workspace'] == workspace_origin['name']:
+ output_origin = output
+
+output_destination = workspace_origin
+
+if sys.argv[1] == "right":
+ output_origin_x = output_origin['rect']['x']
+ output_origin_width = output_origin['rect']['width']
+ next_workspace_start = output_origin_x + output_origin_width
+ for output in outputs:
+ if next_workspace_start == output['rect']['x']:
+ output_destination = output
+
+if sys.argv[1] == "left":
+ output_origin_x = output_origin['rect']['x']
+ output_origin_width = output_origin['rect']['width']
+ next_workspace_start = output_origin_x - output_origin_width
+ for output in outputs:
+ next_workspace_start = output_origin_x - output['rect']['width']
+ if next_workspace_start == output['rect']['x']:
+ output_destination = output
+
+if sys.argv[1] == "bottom":
+ output_origin_y = output_origin['rect']['y']
+ output_origin_height = output_origin['rect']['height']
+ next_workspace_start = output_origin_y + output_origin_height
+ for output in outputs:
+ if next_workspace_start == output['rect']['y']:
+ output_destination = output
+
+if sys.argv[1] == "top":
+ output_origin_y = output_origin['rect']['y']
+ output_origin_height = output_origin['rect']['height']
+ next_workspace_start = output_origin_y - output_origin_height
+ for output in outputs:
+ next_workspace_start=output_origin_y - output['rect']['height']
+ if next_workspace_start == output['rect']['y']:
+ output_destination = output
+
+if (output_destination != workspace_origin):
+ # Move origin workspace to the correct screen
+ i3.command('move', 'workspace to output '+output_destination['name'])
+ # Rename origin workspace to temporary workspace of the screen destination
+ i3.command('rename', 'workspace '+str(workspace_origin['name'])+' to a_fucking_workspace')
+ # Change focus to the workspace destination
+ i3.workspace(output_destination['current_workspace'])
+ # Move destination workspace to the correct screen
+ i3.command('move', 'workspace to output '+workspace_origin['output'])
+ # Rename workspace destination to the origin workspace
+ i3.command('rename', 'workspace '+output_destination['current_workspace']+' to '+str(workspace_origin['name']))
+ # Rename temporary workspace to workspace destination
+ i3.command('rename', 'workspace a_fucking_workspace to '+output_destination['current_workspace'])
+ # Change focus the workspace destination
+ i3.workspace(output_destination['current_workspace'])