aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2022-09-06 17:39:10 -0400
committerXavier Claessens <xclaesse@gmail.com>2022-09-22 11:29:03 -0400
commitb3dc99e6da9536afbd2c12db1c92ea4d68aaed49 (patch)
tree2726ce6db14b75252f520f015a8b95122c48206a
parent5a98c915c5f0a5fe58082d074dae70fb6dd6702d (diff)
downloadmeson-b3dc99e6da9536afbd2c12db1c92ea4d68aaed49.zip
meson-b3dc99e6da9536afbd2c12db1c92ea4d68aaed49.tar.gz
meson-b3dc99e6da9536afbd2c12db1c92ea4d68aaed49.tar.bz2
mconf: Print options with colors
-rw-r--r--mesonbuild/mconf.py46
1 files changed, 30 insertions, 16 deletions
diff --git a/mesonbuild/mconf.py b/mesonbuild/mconf.py
index 5cdb249..e033231 100644
--- a/mesonbuild/mconf.py
+++ b/mesonbuild/mconf.py
@@ -123,18 +123,27 @@ class Conf:
mlog.log(line[0])
continue
+ def wrap_text(text, width):
+ raw = text.text if isinstance(text, mlog.AnsiDecorator) else text
+ indent = ' ' if raw.startswith('[') else ''
+ wrapped = textwrap.wrap(raw, width, subsequent_indent=indent)
+ if isinstance(text, mlog.AnsiDecorator):
+ wrapped = [mlog.AnsiDecorator(i, text.code) for i in wrapped]
+ # Add padding here to get even rows, as `textwrap.wrap()` will
+ # only shorten, not lengthen each item
+ return [str(i) + ' ' * (width - len(i)) for i in wrapped]
+
# wrap will take a long string, and create a list of strings no
# longer than the size given. Then that list can be zipped into, to
# print each line of the output, such the that columns are printed
# to the right width, row by row.
- name = textwrap.wrap(line[0], four_column[0])
- val = textwrap.wrap(line[1], four_column[1])
- choice = textwrap.wrap(line[2], four_column[2])
- desc = textwrap.wrap(line[3], four_column[3])
+ name = wrap_text(line[0], four_column[0])
+ val = wrap_text(line[1], four_column[1])
+ choice = wrap_text(line[2], four_column[2])
+ desc = wrap_text(line[3], four_column[3])
for l in itertools.zip_longest(name, val, choice, desc, fillvalue=''):
- # We must use the length modifier here to get even rows, as
- # `textwrap.wrap` will only shorten, not lengthen each item
- mlog.log('{:{widths[0]}} {:{widths[1]}} {:{widths[2]}} {}'.format(*l, widths=four_column))
+ items = [l[i] if l[i] else ' ' * four_column[i] for i in range(4)]
+ mlog.log(*items)
def split_options_per_subproject(self, options: 'coredata.KeyedOptionDictType') -> T.Dict[str, 'coredata.KeyedOptionDictType']:
result: T.Dict[str, 'coredata.KeyedOptionDictType'] = {}
@@ -144,8 +153,12 @@ class Conf:
result.setdefault(k.subproject, {})[k] = o
return result
- def _add_line(self, name: OptionKey, value, choices, descr) -> None:
- self.name_col.append(' ' * self.print_margin + str(name))
+ def _add_line(self, name, value, choices, descr) -> None:
+ if isinstance(name, mlog.AnsiDecorator):
+ name.text = ' ' * self.print_margin + name.text
+ else:
+ name = ' ' * self.print_margin + name
+ self.name_col.append(name)
self.value_col.append(value)
self.choices_col.append(choices)
self.descr_col.append(descr)
@@ -161,20 +174,21 @@ class Conf:
else:
choices = make_lower_case(choices)
- self._add_line(name, value, choices, descr)
+ self._add_line(mlog.green(name), mlog.yellow(value), mlog.blue(choices), descr)
def add_title(self, title):
- titles = {'descr': 'Description', 'value': 'Current Value', 'choices': 'Possible Values'}
- if self.default_values_only:
- titles['value'] = 'Default Value'
+ title = mlog.cyan(title)
+ descr = mlog.cyan('Description')
+ value = mlog.cyan('Default Value' if self.default_values_only else 'Current Value')
+ choices = mlog.cyan('Possible Values')
self._add_line('', '', '', '')
- self._add_line(title, titles['value'], titles['choices'], titles['descr'])
- self._add_line('-' * len(title), '-' * len(titles['value']), '-' * len(titles['choices']), '-' * len(titles['descr']))
+ self._add_line(title, value, choices, descr)
+ self._add_line('-' * len(title), '-' * len(value), '-' * len(choices), '-' * len(descr))
def add_section(self, section):
self.print_margin = 0
self._add_line('', '', '', '')
- self._add_line(section + ':', '', '', '')
+ self._add_line(mlog.normal_yellow(section + ':'), '', '', '')
self.print_margin = 2
def print_options(self, title: str, options: 'coredata.KeyedOptionDictType') -> None: