tag: add 'b' formatter

Divides the tag's decimal value by 8.

Closes #392
This commit is contained in:
Daniel Eklöf 2024-08-20 14:34:45 +02:00
parent f8ba887dcd
commit 700bf5b28c
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 46 additions and 15 deletions

View file

@ -20,9 +20,12 @@
environment variable.
* network: `type` tag ([#380][380]).
* network: `type` and `kind` tags ([#380][380]).
* tags: `b` tag formatter; divides the tag's decimal value with `8`
([#392][392]).
[96]: https://codeberg.org/dnkl/yambar/issues/96
[380]: https://codeberg.org/dnkl/yambar/issues/380
[392]: https://codeberg.org/dnkl/yambar/issues/392
### Changed

View file

@ -86,11 +86,16 @@ be used.
: format
: Range tags
: Renders a range tag's value as a percentage value
| b
: format
: All tag types
: Renders a tag's value (in decimal) divided by 8. Note: no unit
suffix is appended
| kb, mb, gb
: format
: All tag types
: Renders a tag's value (in decimal) divided by 1000, 1000^2 or
1000^3. Note: no unit suffix is appended)
1000^3. Note: no unit suffix is appended
| kib, mib, gib
: format
: All tag types

47
tag.c
View file

@ -510,6 +510,7 @@ tags_expand_template(const char *template, const struct tag_set *tags)
FMT_HEX,
FMT_OCT,
FMT_PERCENT,
FMT_BYTE,
FMT_KBYTE,
FMT_MBYTE,
FMT_GBYTE,
@ -541,6 +542,8 @@ tags_expand_template(const char *template, const struct tag_set *tags)
format = FMT_OCT;
else if (strcmp(tag_args[i], "%") == 0)
format = FMT_PERCENT;
else if (strcmp(tag_args[i], "b") == 0)
format = FMT_BYTE;
else if (strcmp(tag_args[i], "kb") == 0)
format = FMT_KBYTE;
else if (strcmp(tag_args[i], "mb") == 0)
@ -634,18 +637,28 @@ tags_expand_template(const char *template, const struct tag_set *tags)
break;
}
case FMT_BYTE:
case FMT_KBYTE:
case FMT_MBYTE:
case FMT_GBYTE:
case FMT_KIBYTE:
case FMT_MIBYTE:
case FMT_GIBYTE: {
const long divider = format == FMT_KBYTE ? 1000
: format == FMT_MBYTE ? 1000 * 1000
: format == FMT_GBYTE ? 1000 * 1000 * 1000
: format == FMT_KIBYTE ? 1024
: format == FMT_MIBYTE ? 1024 * 1024
: format == FMT_GIBYTE ? 1024 * 1024 * 1024
const long divider =
format == FMT_BYTE
? 8
: format == FMT_KBYTE
? 1000
: format == FMT_MBYTE
? 1000 * 1000
: format == FMT_GBYTE
? 1000 * 1000 * 1000
: format == FMT_KIBYTE
? 1024
: format == FMT_MIBYTE
? 1024 * 1024
: format == FMT_GIBYTE
? 1024 * 1024 * 1024
: 1;
char str[24];
@ -684,18 +697,28 @@ tags_expand_template(const char *template, const struct tag_set *tags)
fmt = zero_pad ? "%0*lu" : "%*lu";
break;
case FMT_BYTE:
case FMT_KBYTE:
case FMT_MBYTE:
case FMT_GBYTE:
case FMT_KIBYTE:
case FMT_MIBYTE:
case FMT_GIBYTE: {
const long divider = format == FMT_KBYTE ? 1024
: format == FMT_MBYTE ? 1024 * 1024
: format == FMT_GBYTE ? 1024 * 1024 * 1024
: format == FMT_KIBYTE ? 1000
: format == FMT_MIBYTE ? 1000 * 1000
: format == FMT_GIBYTE ? 1000 * 1000 * 1000
const long divider =
format == FMT_BYTE
? 8
: format == FMT_KBYTE
? 1024
: format == FMT_MBYTE
? 1024 * 1024
: format == FMT_GBYTE
? 1024 * 1024 * 1024
: format == FMT_KIBYTE
? 1000
: format == FMT_MIBYTE
? 1000 * 1000
: format == FMT_GIBYTE
? 1000 * 1000 * 1000
: 1;
value /= divider;
fmt = zero_pad ? "%0*lu" : "%*lu";