diff --git a/.config/i3/compact_workspace_numbers.py b/.config/i3/compact_workspace_numbers.py index 75f04e6..84e1a52 100755 --- a/.config/i3/compact_workspace_numbers.py +++ b/.config/i3/compact_workspace_numbers.py @@ -3,18 +3,22 @@ import subprocess import json -workspaces = json.loads(subprocess.run(["i3-msg", "-t", "get_workspaces"], stdout=subprocess.PIPE).stdout) -numbered_workspaces = [ws for ws in workspaces if ws['num'] != -1] -#focused = next(ws for ws in workspaces if ws['focused'] == True) -maximum_ws = max(numbered_workspaces, key=lambda ws: ws['num']) -# loop through all possible workspace numbers -for ws_num in range(1, maximum_ws['num']): - # if workspace with current number doesn't exist - # TODO: handle multiple missing workspaces (consecutive or not) - if next((ws for ws in numbered_workspaces if ws['num'] == ws_num), None) is None: - # loop through all greater numbers and move down 1 - for ws in [ws for ws in numbered_workspaces if ws['num'] > ws_num]: - new_name = ws['name'].split(":") - new_name[0] = str(int(new_name[0]) - 1) # subtract 1 from workspace number - subprocess.run(["i3-msg", "rename", "workspace", - ws['name'], "to", ":".join(new_name)]) +exclude_workspaces = (-1, 10) + +def numbered_workspaces(): + workspaces = json.loads(subprocess.run(["i3-msg", "-t", "get_workspaces"], + stdout=subprocess.PIPE).stdout) + return {int(ws['num']): ws for ws in workspaces if ws['num'] not in exclude_workspaces} + +workspaces = sorted(numbered_workspaces().keys()) +num = 1 +print(workspaces) +while len(workspaces) > 0: + ws = numbered_workspaces()[workspaces.pop(0)] + if ws['num'] != num: + new_name = ws['name'].split(":") + new_name[0] = str(num) + print("move", ws['num'], '->', num) + subprocess.run(["i3-msg", "rename", "workspace", + ws['name'], "to", ":".join(new_name)]) + num += 1