#!/usr/bin/env python3 from functools import partial import json from subprocess import check_output import sys def get_unique(func, wss): return list(set(map(func, wss))) def get_unique_key(key, wss): return get_unique(lambda ws: ws[key], wss) def show_workspace(ws): color = 'f00' if ws['urgent'] else \ '00fcff' if ws['focused'] else \ '6aa3f8' if ws['visible'] else \ '777' return '%s' % (color, ws['name']) def show_output(wss, op): wss = list(filter(lambda ws: ws['output'] == op, wss)) wss.sort(key=lambda ws: ws['name']) return op + ' ' + ' '.join(map(show_workspace, wss)) def main(): i3ws = check_output(['i3-msg', '-t', 'get_workspaces']).decode('utf-8') wss = json.loads(i3ws) outputs = sorted(get_unique_key('output', wss)) print(' * '.join(map(partial(show_output, wss), outputs))) if __name__ == '__main__': main()