55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
# vim:fileencoding=utf-8:noet
|
|
|
|
from powerline import Powerline
|
|
from powerline.lib import mergedicts, parsedotval
|
|
|
|
|
|
def mergeargs(argvalue):
|
|
if not argvalue:
|
|
return None
|
|
r = dict([argvalue[0]])
|
|
for subval in argvalue[1:]:
|
|
mergedicts(r, dict([subval]))
|
|
return r
|
|
|
|
|
|
class ShellPowerline(Powerline):
|
|
def __init__(self, args, **kwargs):
|
|
self.args = args
|
|
self.theme_option = mergeargs(args.theme_option) or {}
|
|
super(ShellPowerline, self).__init__(args.ext[0], args.renderer_module, **kwargs)
|
|
|
|
def load_main_config(self):
|
|
r = super(ShellPowerline, self).load_main_config()
|
|
if self.args.config:
|
|
mergedicts(r, mergeargs(self.args.config))
|
|
return r
|
|
|
|
def load_theme_config(self, name):
|
|
r = super(ShellPowerline, self).load_theme_config(name)
|
|
if name in self.theme_option:
|
|
mergedicts(r, self.theme_option[name])
|
|
return r
|
|
|
|
def get_config_paths(self):
|
|
if self.args.config_path:
|
|
return [self.args.config_path]
|
|
else:
|
|
return super(ShellPowerline, self).get_config_paths()
|
|
|
|
|
|
def get_argparser(parser=None, *args, **kwargs):
|
|
if not parser:
|
|
import argparse
|
|
parser = argparse.ArgumentParser
|
|
p = parser(*args, **kwargs)
|
|
p.add_argument('ext', nargs=1)
|
|
p.add_argument('side', nargs='?', choices=('left', 'right'))
|
|
p.add_argument('-r', '--renderer_module', metavar='MODULE', type=str)
|
|
p.add_argument('-w', '--width', type=int)
|
|
p.add_argument('--last_exit_code', metavar='INT', type=int)
|
|
p.add_argument('--last_pipe_status', metavar='LIST', default='', type=lambda s: [int(status) for status in s.split()])
|
|
p.add_argument('-c', '--config', metavar='KEY.KEY=VALUE', type=parsedotval, action='append')
|
|
p.add_argument('-t', '--theme_option', metavar='THEME.KEY.KEY=VALUE', type=parsedotval, action='append')
|
|
p.add_argument('-p', '--config_path', metavar='PATH')
|
|
return p
|