Make daemon work with aboveleft shell key

This commit is contained in:
ZyX 2014-08-02 20:35:23 +04:00
parent 8374a66ca7
commit 9290c2a23b
3 changed files with 54 additions and 39 deletions

View File

@ -1,5 +1,7 @@
# vim:fileencoding=utf-8:noet # vim:fileencoding=utf-8:noet
import os
from powerline import Powerline from powerline import Powerline
from powerline.lib import mergedicts, parsedotval from powerline.lib import mergedicts, parsedotval
@ -73,3 +75,26 @@ def finish_args(args):
args.theme_option = {} args.theme_option = {}
if args.renderer_arg: if args.renderer_arg:
args.renderer_arg = mergeargs((parsedotval(v) for v in args.renderer_arg)) args.renderer_arg = mergeargs((parsedotval(v) for v in args.renderer_arg))
def write_output(args, powerline, segment_info, write):
if args.renderer_arg:
segment_info.update(args.renderer_arg)
if args.side.startswith('above'):
for line in powerline.render_above_lines(
width=args.width,
segment_info=segment_info,
mode=os.environ.get('_POWERLINE_MODE'),
):
write(line)
write('\n')
args.side = args.side[len('above'):]
if args.side:
rendered = powerline.render(
width=args.width,
side=args.side,
segment_info=segment_info,
mode=os.environ.get('_POWERLINE_MODE'),
)
write(rendered)

View File

@ -12,8 +12,9 @@ from signal import signal, SIGTERM
from time import sleep from time import sleep
from functools import partial from functools import partial
from locale import getpreferredencoding from locale import getpreferredencoding
from io import StringIO
from powerline.shell import get_argparser, finish_args, ShellPowerline from powerline.shell import get_argparser, finish_args, ShellPowerline, write_output
from powerline.lib.monotonic import monotonic from powerline.lib.monotonic import monotonic
is_daemon = False is_daemon = False
@ -77,35 +78,41 @@ def render(args):
'environ': environ, 'environ': environ,
'args': args, 'args': args,
} }
key = (args.ext[0], args.renderer_module, key = (
tuple(args.config) if args.config else None, args.ext[0],
tuple(args.theme_option) if args.theme_option else None,) args.renderer_module,
if args.renderer_arg: tuple(args.config) if args.config else None,
segment_info.update(args.renderer_arg) tuple(args.theme_option) if args.theme_option else None,
tuple(args.renderer_arg) if args.renderer_arg else None,
)
finish_args(args) finish_args(args)
pl = None powerline = None
try: try:
pl = powerlines[key] powerline = powerlines[key]
except KeyError: except KeyError:
try: try:
pl = powerlines[key] = PowerlineDaemon( powerline = powerlines[key] = PowerlineDaemon(
args, args,
logger=logger, logger=logger,
config_loader=config_loader config_loader=config_loader,
run_once=False,
) )
if logger is None:
logger = powerline.logger
if config_loader is None:
config_loader = powerline.config_loader
except SystemExit: except SystemExit:
# Somebody thought raising system exit was a good idea, # Somebody thought raising system exit was a good idea,
return '' return ''
except Exception as e: except Exception as e:
if pl: if powerline:
pl.pl.exception('Failed to render {0}: {1}', str(key), str(e)) powerline.pl.exception('Failed to render {0}: {1}', str(key), str(e))
else: else:
return 'Failed to render {0}: {1}'.format(str(key), str(e)) return 'Failed to render {0}: {1}'.format(str(key), str(e))
if logger is None: s = StringIO()
logger = pl.logger write_output(args, powerline, segment_info, s.write)
if config_loader is None: s.seek(0)
config_loader = pl.config_loader return s.read()
return pl.render(width=args.width, side=args.side, segment_info=segment_info)
def eintr_retry_call(func, *args, **kwargs): def eintr_retry_call(func, *args, **kwargs):

View File

@ -5,10 +5,11 @@ import sys
import os import os
try: try:
from powerline.shell import ShellPowerline, get_argparser, finish_args from powerline.shell import ShellPowerline, get_argparser, finish_args, write_output
except ImportError: except ImportError:
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(os.path.realpath(__file__))))) sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(os.path.realpath(__file__)))))
from powerline.shell import ShellPowerline, get_argparser, finish_args # NOQA from powerline.shell import ShellPowerline, get_argparser, finish_args, write_output # NOQA
def write(output): def write(output):
try: try:
@ -16,28 +17,10 @@ def write(output):
except UnicodeEncodeError: except UnicodeEncodeError:
sys.stdout.write(output.encode('utf-8')) sys.stdout.write(output.encode('utf-8'))
if __name__ == '__main__': if __name__ == '__main__':
args = get_argparser(description=__doc__).parse_args() args = get_argparser(description=__doc__).parse_args()
finish_args(args) finish_args(args)
powerline = ShellPowerline(args, run_once=True) powerline = ShellPowerline(args, run_once=True)
segment_info = {'args': args, 'environ': os.environ} segment_info = {'args': args, 'environ': os.environ}
if args.renderer_arg: write_output(args, powerline, segment_info, write)
segment_info.update(args.renderer_arg)
if args.side.startswith('above'):
for line in powerline.render_above_lines(
width=args.width,
segment_info=segment_info,
mode=os.environ.get('_POWERLINE_MODE'),
):
write(line)
sys.stdout.write('\n')
args.side = args.side[len('above'):]
if args.side:
rendered = powerline.render(
width=args.width,
side=args.side,
segment_info=segment_info,
mode=os.environ.get('_POWERLINE_MODE'),
)
write(rendered)