diff --git a/.config/i3/compact_workspace_numbers.py b/.config/i3/compact_workspace_numbers.py new file mode 100755 index 0000000..75f04e6 --- /dev/null +++ b/.config/i3/compact_workspace_numbers.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 + +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)]) diff --git a/.config/i3/config b/.config/i3/config index 98b598d..2a1b6de 100644 --- a/.config/i3/config +++ b/.config/i3/config @@ -240,6 +240,8 @@ mode "resize" { bindsym k resize grow height 10 px or 10 ppt bindsym l resize shrink height 10 px or 10 ppt bindsym semicolon resize grow width 10 px or 10 ppt + + bindsym c exec --no-startup-id /home/adam/.config/i3/compact_workspace_numbers.py # same bindings, but for the arrow keys bindsym Left resize shrink width 10 px or 10 ppt