1
0
dotfiles/new/i3/i3-quiet.py
Tom Crossley FEARNLEY 256a1e22f3 new
2020-03-20 01:42:31 +00:00

71 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
import json
import subprocess
import os
ZEN_NUMBER = 99
ZEN_NAME = 'zen'
WIDTH_PERC=90
MAX_WIDTH=1920
HEIGHT_PERC=90
MAX_HEIGHT=1024
ZEN_BORDER = 'none'
DEFAULT_BORDER = 'none'
ZEN_FILE_PATH = os.path.join(os.environ['HOME'], '.config/i3/.i3-quiet.json')
def enable_zen_mode(workspace):
width = round(min(workspace['rect']['width'] * WIDTH_PERC / 100, MAX_WIDTH))
height = round(min(workspace['rect']['height'] * HEIGHT_PERC / 100, MAX_HEIGHT))
workspace_name = '{}: {}'.format(ZEN_NUMBER, workspace['name'])
with open(ZEN_FILE_PATH, 'w') as zen_file:
json.dump(workspace, zen_file)
return ';'.join([
'move container to workspace {}'.format(workspace_name),
'workspace {}'.format(workspace_name),
'floating enable',
'border {}'.format(ZEN_BORDER),
'resize set width {}'.format(width),
'resize set height {}'.format(height),
'move position center'
])
def disable_zen_mode(workspace):
return ';'.join([
'move container to workspace number {}'.format(workspace['num']),
'workspace number {}'.format(workspace['num']),
'floating disable',
'border {}'.format(DEFAULT_BORDER)
])
def goto_zen(workspace_name):
return 'workspace {}'.format(workspace_name)
out = subprocess.run(['i3-msg', '-t', 'get_workspaces'], capture_output=True)
workspaces = json.loads(out.stdout)
with open(ZEN_FILE_PATH, 'r') as zen_file:
try:
workspace_previous = json.load(zen_file)
except:
workspace_previous = None
workspace_current = list(filter(lambda w: w['focused'], workspaces))[0]
workspace_zen = list(filter(lambda w: w['num'] == ZEN_NUMBER, workspaces))
if __name__ == '__main__':
if len(sys.argv) > 1:
if len(workspace_zen):
msg = disable_zen_mode(workspace_previous)
else:
if len(workspace_zen):
msg = goto_zen(workspace_zen[0]['name'])
else:
msg = enable_zen_mode(workspace_current)
print(msg)
subprocess.run(['i3-msg', msg])