94 lines
2.7 KiB
Python
94 lines
2.7 KiB
Python
#!/usr/bin/env python
|
|
# vim:fileencoding=utf-8
|
|
# License: GPL v3 Copyright: 2018, Kovid Goyal <kovid at kovidgoyal.net>
|
|
|
|
import os
|
|
|
|
from kitty.config_utils import (
|
|
init_config, load_config as _load_config, merge_dicts, parse_config_base,
|
|
resolve_config, to_color
|
|
)
|
|
from kitty.constants import config_dir
|
|
from kitty.rgb import color_as_sgr
|
|
|
|
defaults = None
|
|
default_config_path = os.path.join(
|
|
os.path.dirname(os.path.abspath(__file__)), 'diff.conf'
|
|
)
|
|
|
|
formats = {
|
|
'title': '',
|
|
'margin': '',
|
|
'text': '',
|
|
}
|
|
|
|
|
|
def set_formats(opts):
|
|
formats['text'] = '38' + color_as_sgr(opts.foreground) + ';48' + color_as_sgr(opts.background)
|
|
formats['title'] = '38' + color_as_sgr(opts.title_fg) + ';48' + color_as_sgr(opts.title_bg) + ';1'
|
|
formats['margin'] = '38' + color_as_sgr(opts.margin_fg) + ';48' + color_as_sgr(opts.margin_bg)
|
|
formats['added_margin'] = '38' + color_as_sgr(opts.margin_fg) + ';48' + color_as_sgr(opts.added_margin_bg)
|
|
formats['removed_margin'] = '38' + color_as_sgr(opts.margin_fg) + ';48' + color_as_sgr(opts.removed_margin_bg)
|
|
formats['added'] = '38' + color_as_sgr(opts.foreground) + ';48' + color_as_sgr(opts.added_bg)
|
|
formats['removed'] = '38' + color_as_sgr(opts.foreground) + ';48' + color_as_sgr(opts.removed_bg)
|
|
formats['filler'] = '48' + color_as_sgr(opts.filler_bg)
|
|
|
|
|
|
type_map = {}
|
|
|
|
for name in (
|
|
'foreground background title_fg title_bg margin_bg margin_fg removed_bg removed_margin_bg added_bg added_margin_bg filler_bg'
|
|
).split():
|
|
type_map[name] = to_color
|
|
|
|
|
|
def special_handling(*a):
|
|
pass
|
|
|
|
|
|
def parse_config(lines, check_keys=True):
|
|
ans = {}
|
|
parse_config_base(
|
|
lines,
|
|
defaults,
|
|
type_map,
|
|
special_handling,
|
|
ans,
|
|
check_keys=check_keys
|
|
)
|
|
return ans
|
|
|
|
|
|
def merge_configs(defaults, vals):
|
|
ans = {}
|
|
for k, v in defaults.items():
|
|
if isinstance(v, dict):
|
|
newvals = vals.get(k, {})
|
|
ans[k] = merge_dicts(v, newvals)
|
|
else:
|
|
ans[k] = vals.get(k, v)
|
|
return ans
|
|
|
|
|
|
def parse_defaults(lines, check_keys=False):
|
|
return parse_config(lines, check_keys)
|
|
|
|
|
|
Options, defaults = init_config(default_config_path, parse_defaults)
|
|
|
|
|
|
def load_config(*paths, overrides=None):
|
|
return _load_config(Options, defaults, parse_config, merge_configs, *paths, overrides=overrides)
|
|
|
|
|
|
SYSTEM_CONF = '/etc/xdg/kitty/diff.conf'
|
|
defconf = os.path.join(config_dir, 'diff.conf')
|
|
|
|
|
|
def init_config(args):
|
|
config = tuple(resolve_config(SYSTEM_CONF, defconf, args.config))
|
|
overrides = (a.replace('=', ' ', 1) for a in args.override or ())
|
|
opts = load_config(*config, overrides=overrides)
|
|
set_formats(opts)
|
|
return opts
|