| ... | ... |
@@ -148,6 +148,14 @@ Environment variables: |
| 148 | 148 |
is not defined, `pager` if it exists in `$PATH`, else `less` . The value is |
| 149 | 149 |
interpreted by the shell. If the `$LESS` environment variable is unset, it |
| 150 | 150 |
is set to `FR`. |
| 151 |
+ GLREGISTRY_COLORS |
|
| 152 |
+ If standard out is a terminal, the colors used in output of the `enums`, |
|
| 153 |
+ `enums-tree`, `params`, `params-tree`, `audit,` and `audit-tree` commands. |
|
| 154 |
+ It uses the same format (and defaults) as GREP_COLORS, i.e. a |
|
| 155 |
+ colon-separated list of capabilties: `ms` (matching selected), `fn` (file |
|
| 156 |
+ name), `ln` (line number), `se` (separators). Added custom capabilities |
|
| 157 |
+ are: `ve` (version), `ex` (extension), `un` (unsupported). Defaults to |
|
| 158 |
+ `ms=01;31:fn=35:ln=32:se=36:ve=01;34:ex=34:un=01;33`. |
|
| 151 | 159 |
``` |
| 152 | 160 |
|
| 153 | 161 |
## References |
| ... | ... |
@@ -105,6 +105,14 @@ Environment variables: |
| 105 | 105 |
is not defined, `pager` if it exists in `$PATH`, else `less` . The value is |
| 106 | 106 |
interpreted by the shell. If the `$LESS` environment variable is unset, it |
| 107 | 107 |
is set to `FR`. |
| 108 |
+ GLREGISTRY_COLORS |
|
| 109 |
+ If standard out is a terminal, the colors used in output of the `enums`, |
|
| 110 |
+ `enums-tree`, `params`, `params-tree`, `audit,` and `audit-tree` commands. |
|
| 111 |
+ It uses the same format (and defaults) as GREP_COLORS, i.e. a |
|
| 112 |
+ colon-separated list of capabilties: `ms` (matching selected), `fn` (file |
|
| 113 |
+ name), `ln` (line number), `se` (separators). Added custom capabilities |
|
| 114 |
+ are: `ve` (version), `ex` (extension), `un` (unsupported). Defaults to |
|
| 115 |
+ `ms=01;31:fn=35:ln=32:se=36:ve=01;34:ex=34:un=01;33`. |
|
| 108 | 116 |
""" |
| 109 | 117 |
|
| 110 | 118 |
|
| ... | ... |
@@ -150,6 +158,20 @@ CACHE = ENV_XDG('CACHE', os.path.join('~', '.cache'))
|
| 150 | 158 |
EDITOR = ENV_PRG('EDITOR', 'vi')
|
| 151 | 159 |
PAGER = ENV_PRG('PAGER', 'less')
|
| 152 | 160 |
LESS = os.environ.get('LESS') or 'FR'
|
| 161 |
+COLORS = collections.defaultdict(str, [ |
|
| 162 |
+ (color.split('=') + [''])[:2]
|
|
| 163 |
+ for color in |
|
| 164 |
+ filter(None, ( |
|
| 165 |
+ os.environ.get('GLREGISTRY_COLORS') or
|
|
| 166 |
+ (lambda x, y: ':'.join([x, x and y]))( |
|
| 167 |
+ ( |
|
| 168 |
+ os.environ.get('GREP_COLORS') or
|
|
| 169 |
+ 'ms=01;31:fn=35:ln=32:se=36' |
|
| 170 |
+ ), |
|
| 171 |
+ 've=01;34:ex=34:un=01;33', |
|
| 172 |
+ ) |
|
| 173 |
+ ).split(':'))
|
|
| 174 |
+]) |
|
| 153 | 175 |
IN = lambda a, v, s: f"contains(concat('{s}',@{a},'{s}'),'{s}{v}{s}')"
|
| 154 | 176 |
MAYBE = lambda a, v: f"(@{a}='{v}' or not(@{a}))"
|
| 155 | 177 |
TYPES = "/registry/types" |
| ... | ... |
@@ -208,9 +230,27 @@ def page(lines): |
| 208 | 230 |
sys.stdout.write(lines) |
| 209 | 231 |
|
| 210 | 232 |
|
| 233 |
+### `color` |
|
| 234 |
+def color(capability, string): |
|
| 235 |
+ if not sys.stdout.isatty(): |
|
| 236 |
+ return string |
|
| 237 |
+ return f'\x1b[{COLORS[capability]}m{string}\x1b[m'
|
|
| 238 |
+ |
|
| 239 |
+ |
|
| 240 |
+### `color_supports` |
|
| 241 |
+def color_supports(supports): |
|
| 242 |
+ for support in supports: |
|
| 243 |
+ if support == 'UNSUPPORTED' or support.startswith('<'):
|
|
| 244 |
+ yield color('un', support)
|
|
| 245 |
+ elif support.startswith('GL_'):
|
|
| 246 |
+ yield color('ex', support)
|
|
| 247 |
+ else: |
|
| 248 |
+ yield color('ve', support)
|
|
| 249 |
+ |
|
| 250 |
+ |
|
| 211 | 251 |
### `indentjoin` |
| 212 | 252 |
def indentjoin(indent, sep, parts): |
| 213 |
- return ' ' * INDENT * indent + sep.join(map(str, parts)) |
|
| 253 |
+ return ' ' * INDENT * indent + color('se', sep).join(map(str, parts))
|
|
| 214 | 254 |
|
| 215 | 255 |
|
| 216 | 256 |
### `removeprefix` |
| ... | ... |
@@ -455,9 +495,9 @@ def enums(xml, group=None): |
| 455 | 495 |
### `enums_tree` |
| 456 | 496 |
def enums_tree(xml, group=None): |
| 457 | 497 |
for supports, enums in sorted(enums_(xml, group).items()): |
| 458 |
- yield indentjoin(0, ',', supports) |
|
| 498 |
+ yield indentjoin(0, ',', color_supports(supports)) |
|
| 459 | 499 |
for enum in sorted(enums): |
| 460 |
- yield indentjoin(1, '', [enum]) |
|
| 500 |
+ yield indentjoin(1, '', [color('ms', enum)])
|
|
| 461 | 501 |
|
| 462 | 502 |
|
| 463 | 503 |
### `params_` |
| ... | ... |
@@ -489,13 +529,13 @@ def params(xml, group=None): |
| 489 | 529 |
def params_tree(xml, group=None): |
| 490 | 530 |
for (count, param), occurences in sorted(params_(xml, group).items()): |
| 491 | 531 |
yield indentjoin(0, ':', [ |
| 492 |
- param, |
|
| 493 |
- -count, |
|
| 532 |
+ color('ms', param),
|
|
| 533 |
+ color('ln', -count),
|
|
| 494 | 534 |
]) |
| 495 | 535 |
for supports_, commands in sorted(occurences.items()): |
| 496 |
- yield indentjoin(1, ',', supports_) |
|
| 536 |
+ yield indentjoin(1, ',', color_supports(supports_)) |
|
| 497 | 537 |
for command in sorted(commands): |
| 498 |
- yield indentjoin(2, '', [command]) |
|
| 538 |
+ yield indentjoin(2, '', [color('fn', command)])
|
|
| 499 | 539 |
|
| 500 | 540 |
|
| 501 | 541 |
### `audit_` |
| ... | ... |
@@ -518,23 +558,23 @@ def audit(xml, path=None): |
| 518 | 558 |
for file, line in locations |
| 519 | 559 |
): |
| 520 | 560 |
yield indentjoin(0, ':', [ |
| 521 |
- file, |
|
| 522 |
- line, |
|
| 523 |
- indentjoin(0, ',', supports), |
|
| 524 |
- name |
|
| 561 |
+ color('fn', file),
|
|
| 562 |
+ color('ln', line),
|
|
| 563 |
+ indentjoin(0, ',', color_supports(supports)), |
|
| 564 |
+ color('ms', name),
|
|
| 525 | 565 |
]) |
| 526 | 566 |
|
| 527 | 567 |
|
| 528 | 568 |
### `audit_tree` |
| 529 | 569 |
def audit_tree(xml, path=None): |
| 530 | 570 |
for supports, names in sorted(audit_(xml, path).items()): |
| 531 |
- yield indentjoin(0, ',', supports) |
|
| 571 |
+ yield indentjoin(0, ',', color_supports(supports)) |
|
| 532 | 572 |
for name, locations in sorted(names.items()): |
| 533 |
- yield indentjoin(1, '', [name]) |
|
| 573 |
+ yield indentjoin(1, '', [color('ms', name)])
|
|
| 534 | 574 |
for file, line in sorted(locations): |
| 535 | 575 |
yield indentjoin(2, ':', [ |
| 536 |
- file, |
|
| 537 |
- line, |
|
| 576 |
+ color('fn', file),
|
|
| 577 |
+ color('ln', line),
|
|
| 538 | 578 |
]) |
| 539 | 579 |
|
| 540 | 580 |
|
| ... | ... |
@@ -573,11 +613,11 @@ def refs(name): |
| 573 | 613 |
### `refs_all` |
| 574 | 614 |
def refs_all(name): |
| 575 | 615 |
for support, locations in sorted(refs_(name).items()): |
| 576 |
- yield indentjoin(0, ',', [support]) |
|
| 616 |
+ yield indentjoin(0, ',', color_supports([support])) |
|
| 577 | 617 |
for name_, url in sorted(locations): |
| 578 | 618 |
yield indentjoin(1, ':', [ |
| 579 |
- name_, |
|
| 580 |
- url, |
|
| 619 |
+ color('ms', name_),
|
|
| 620 |
+ color('fn', url),
|
|
| 581 | 621 |
]) |
| 582 | 622 |
|
| 583 | 623 |
|