aboutsummaryrefslogtreecommitdiff
path: root/dotfiles/scripts/switch-workspace.py
blob: d311c46e8c5b7ddace31f03bba2049ca69401ee0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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))