| ... | ... |
@@ -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 |
|
| ... | ... |
@@ -151,6 +159,26 @@ CACHE = ENV_XDG('CACHE', os.path.join('~', '.cache'))
|
| 151 | 159 |
EDITOR = ENV_PRG('EDITOR', 'vi')
|
| 152 | 160 |
PAGER = ENV_PRG('PAGER', 'less')
|
| 153 | 161 |
LESS = os.environ.get('LESS', 'FR')
|
| 162 |
+COLORS = collections.defaultdict( |
|
| 163 |
+ str, |
|
| 164 |
+ [ |
|
| 165 |
+ (color.split('=') + [''])[:2]
|
|
| 166 |
+ for color in |
|
| 167 |
+ filter( |
|
| 168 |
+ None, |
|
| 169 |
+ os.environ.get( |
|
| 170 |
+ 'GLREGISTRY_COLORS', |
|
| 171 |
+ (lambda x, y: ':'.join([x, x and y]))( |
|
| 172 |
+ os.environ.get( |
|
| 173 |
+ 'GREP_COLORS', |
|
| 174 |
+ 'ms=01;31:fn=35:ln=32:se=36', |
|
| 175 |
+ ), |
|
| 176 |
+ 've=01;34:ex=34:un=01;33', |
|
| 177 |
+ ), |
|
| 178 |
+ ).split(':'),
|
|
| 179 |
+ ) |
|
| 180 |
+ ], |
|
| 181 |
+) |
|
| 154 | 182 |
IN = lambda a, v, s: f"contains(concat('{s}',@{a},'{s}'),'{s}{v}{s}')"
|
| 155 | 183 |
MAYBE = lambda a, v: f"(@{a}='{v}' or not(@{a}))"
|
| 156 | 184 |
TYPES = "/registry/types" |
| ... | ... |
@@ -209,9 +237,27 @@ def page(lines): |
| 209 | 237 |
sys.stdout.write(lines) |
| 210 | 238 |
|
| 211 | 239 |
|
| 240 |
+### `color` |
|
| 241 |
+def color(capability, string): |
|
| 242 |
+ if not sys.stdout.isatty(): |
|
| 243 |
+ return string |
|
| 244 |
+ return f'\x1b[{COLORS[capability]}m{string}\x1b[m'
|
|
| 245 |
+ |
|
| 246 |
+ |
|
| 247 |
+### `color_supports` |
|
| 248 |
+def color_supports(supports): |
|
| 249 |
+ for support in supports: |
|
| 250 |
+ if support == 'UNSUPPORTED' or support.startswith('<'):
|
|
| 251 |
+ yield color('un', support)
|
|
| 252 |
+ elif support.startswith('GL_'):
|
|
| 253 |
+ yield color('ex', support)
|
|
| 254 |
+ else: |
|
| 255 |
+ yield color('ve', support)
|
|
| 256 |
+ |
|
| 257 |
+ |
|
| 212 | 258 |
### `indentjoin` |
| 213 | 259 |
def indentjoin(indent, sep, parts): |
| 214 |
- return ' ' * INDENT * indent + sep.join(map(str, parts)) |
|
| 260 |
+ return ' ' * INDENT * indent + color('se', sep).join(map(str, parts))
|
|
| 215 | 261 |
|
| 216 | 262 |
|
| 217 | 263 |
### `removeprefix` |
| ... | ... |
@@ -456,9 +502,9 @@ def enums(xml, group=None): |
| 456 | 502 |
### `enums_tree` |
| 457 | 503 |
def enums_tree(xml, group=None): |
| 458 | 504 |
for supports, enums in sorted(enums_(xml, group).items()): |
| 459 |
- yield indentjoin(0, ',', supports) |
|
| 505 |
+ yield indentjoin(0, ',', color_supports(supports)) |
|
| 460 | 506 |
for enum in sorted(enums): |
| 461 |
- yield indentjoin(1, '', [enum]) |
|
| 507 |
+ yield indentjoin(1, '', [color('ms', enum)])
|
|
| 462 | 508 |
|
| 463 | 509 |
|
| 464 | 510 |
### `params_` |
| ... | ... |
@@ -490,13 +536,13 @@ def params(xml, group=None): |
| 490 | 536 |
def params_tree(xml, group=None): |
| 491 | 537 |
for (count, param), occurences in sorted(params_(xml, group).items()): |
| 492 | 538 |
yield indentjoin(0, ':', [ |
| 493 |
- param, |
|
| 494 |
- -count, |
|
| 539 |
+ color('ms', param),
|
|
| 540 |
+ color('ln', -count),
|
|
| 495 | 541 |
]) |
| 496 | 542 |
for supports_, commands in sorted(occurences.items()): |
| 497 |
- yield indentjoin(1, ',', supports_) |
|
| 543 |
+ yield indentjoin(1, ',', color_supports(supports_)) |
|
| 498 | 544 |
for command in sorted(commands): |
| 499 |
- yield indentjoin(2, '', [command]) |
|
| 545 |
+ yield indentjoin(2, '', [color('fn', command)])
|
|
| 500 | 546 |
|
| 501 | 547 |
|
| 502 | 548 |
### `audit_` |
| ... | ... |
@@ -519,23 +565,23 @@ def audit(xml, path=None): |
| 519 | 565 |
for file, line in locations |
| 520 | 566 |
): |
| 521 | 567 |
yield indentjoin(0, ':', [ |
| 522 |
- file, |
|
| 523 |
- line, |
|
| 524 |
- indentjoin(0, ',', supports), |
|
| 525 |
- name |
|
| 568 |
+ color('fn', file),
|
|
| 569 |
+ color('ln', line),
|
|
| 570 |
+ indentjoin(0, ',', color_supports(supports)), |
|
| 571 |
+ color('ms', name),
|
|
| 526 | 572 |
]) |
| 527 | 573 |
|
| 528 | 574 |
|
| 529 | 575 |
### `audit_tree` |
| 530 | 576 |
def audit_tree(xml, path=None): |
| 531 | 577 |
for supports, names in sorted(audit_(xml, path).items()): |
| 532 |
- yield indentjoin(0, ',', supports) |
|
| 578 |
+ yield indentjoin(0, ',', color_supports(supports)) |
|
| 533 | 579 |
for name, locations in sorted(names.items()): |
| 534 |
- yield indentjoin(1, '', [name]) |
|
| 580 |
+ yield indentjoin(1, '', [color('ms', name)])
|
|
| 535 | 581 |
for file, line in sorted(locations): |
| 536 | 582 |
yield indentjoin(2, ':', [ |
| 537 |
- file, |
|
| 538 |
- line, |
|
| 583 |
+ color('fn', file),
|
|
| 584 |
+ color('ln', line),
|
|
| 539 | 585 |
]) |
| 540 | 586 |
|
| 541 | 587 |
|
| ... | ... |
@@ -574,11 +620,11 @@ def refs(name): |
| 574 | 620 |
### `refs_all` |
| 575 | 621 |
def refs_all(name): |
| 576 | 622 |
for support, locations in sorted(refs_(name).items()): |
| 577 |
- yield indentjoin(0, ',', [support]) |
|
| 623 |
+ yield indentjoin(0, ',', color_supports([support])) |
|
| 578 | 624 |
for name_, url in sorted(locations): |
| 579 | 625 |
yield indentjoin(1, ':', [ |
| 580 |
- name_, |
|
| 581 |
- url, |
|
| 626 |
+ color('ms', name_),
|
|
| 627 |
+ color('fn', url),
|
|
| 582 | 628 |
]) |
| 583 | 629 |
|
| 584 | 630 |
|