61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
|
#!/usr/bin/env python
|
||
|
# vim:fileencoding=utf-8:noet
|
||
|
from __future__ import (unicode_literals, division, absolute_import, print_function)
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
import time
|
||
|
|
||
|
from threading import Lock, Timer
|
||
|
from argparse import ArgumentParser
|
||
|
|
||
|
from powerline.lemonbar import LemonbarPowerline
|
||
|
from powerline.lib.encoding import get_unicode_writer
|
||
|
from powerline.bindings.wm import DEFAULT_UPDATE_INTERVAL
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
parser = ArgumentParser(description='Powerline lemonbar bindings.')
|
||
|
parser.add_argument(
|
||
|
'--i3', action='store_true',
|
||
|
help='Subscribe for i3 events.'
|
||
|
)
|
||
|
args = parser.parse_args()
|
||
|
powerline = LemonbarPowerline()
|
||
|
powerline.update_renderer()
|
||
|
powerline.pl.warn("The 'bar' bindings are deprecated, please switch to 'lemonbar'")
|
||
|
lock = Lock()
|
||
|
modes = ['default']
|
||
|
write = get_unicode_writer(encoding='utf-8')
|
||
|
|
||
|
def render(reschedule=False):
|
||
|
if reschedule:
|
||
|
Timer(DEFAULT_UPDATE_INTERVAL, render, kwargs={'reschedule': True}).start()
|
||
|
|
||
|
global lock
|
||
|
with lock:
|
||
|
write(powerline.render(mode=modes[0]))
|
||
|
write('\n')
|
||
|
sys.stdout.flush()
|
||
|
|
||
|
def update(evt):
|
||
|
modes[0] = evt.change
|
||
|
render()
|
||
|
|
||
|
render(reschedule=True)
|
||
|
|
||
|
if args.i3:
|
||
|
try:
|
||
|
import i3ipc
|
||
|
except ImportError:
|
||
|
import i3
|
||
|
i3.Subscription(lambda evt, data, sub: print(render()), 'workspace')
|
||
|
else:
|
||
|
conn = i3ipc.Connection()
|
||
|
conn.on('workspace::focus', lambda conn, evt: render())
|
||
|
conn.on('mode', lambda conn, evt: update(evt))
|
||
|
conn.main()
|
||
|
|
||
|
while True:
|
||
|
time.sleep(1e8)
|