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. environment variable.
* network: `type` tag ([#380][380]). * network: `type` tag ([#380][380]).
* network: `type` and `kind` tags ([#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 [96]: https://codeberg.org/dnkl/yambar/issues/96
[380]: https://codeberg.org/dnkl/yambar/issues/380 [380]: https://codeberg.org/dnkl/yambar/issues/380
[392]: https://codeberg.org/dnkl/yambar/issues/392
### Changed ### Changed

View file

@ -86,11 +86,16 @@ be used.
: format : format
: Range tags : Range tags
: Renders a range tag's value as a percentage value : 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 | kb, mb, gb
: format : format
: All tag types : All tag types
: Renders a tag's value (in decimal) divided by 1000, 1000^2 or : 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 | kib, mib, gib
: format : format
: All tag types : 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_HEX,
FMT_OCT, FMT_OCT,
FMT_PERCENT, FMT_PERCENT,
FMT_BYTE,
FMT_KBYTE, FMT_KBYTE,
FMT_MBYTE, FMT_MBYTE,
FMT_GBYTE, FMT_GBYTE,
@ -541,6 +542,8 @@ tags_expand_template(const char *template, const struct tag_set *tags)
format = FMT_OCT; format = FMT_OCT;
else if (strcmp(tag_args[i], "%") == 0) else if (strcmp(tag_args[i], "%") == 0)
format = FMT_PERCENT; format = FMT_PERCENT;
else if (strcmp(tag_args[i], "b") == 0)
format = FMT_BYTE;
else if (strcmp(tag_args[i], "kb") == 0) else if (strcmp(tag_args[i], "kb") == 0)
format = FMT_KBYTE; format = FMT_KBYTE;
else if (strcmp(tag_args[i], "mb") == 0) else if (strcmp(tag_args[i], "mb") == 0)
@ -634,18 +637,28 @@ tags_expand_template(const char *template, const struct tag_set *tags)
break; break;
} }
case FMT_BYTE:
case FMT_KBYTE: case FMT_KBYTE:
case FMT_MBYTE: case FMT_MBYTE:
case FMT_GBYTE: case FMT_GBYTE:
case FMT_KIBYTE: case FMT_KIBYTE:
case FMT_MIBYTE: case FMT_MIBYTE:
case FMT_GIBYTE: { case FMT_GIBYTE: {
const long divider = format == FMT_KBYTE ? 1000 const long divider =
: format == FMT_MBYTE ? 1000 * 1000 format == FMT_BYTE
: format == FMT_GBYTE ? 1000 * 1000 * 1000 ? 8
: format == FMT_KIBYTE ? 1024 : format == FMT_KBYTE
: format == FMT_MIBYTE ? 1024 * 1024 ? 1000
: format == FMT_GIBYTE ? 1024 * 1024 * 1024 : 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; : 1;
char str[24]; char str[24];
@ -684,18 +697,28 @@ tags_expand_template(const char *template, const struct tag_set *tags)
fmt = zero_pad ? "%0*lu" : "%*lu"; fmt = zero_pad ? "%0*lu" : "%*lu";
break; break;
case FMT_BYTE:
case FMT_KBYTE: case FMT_KBYTE:
case FMT_MBYTE: case FMT_MBYTE:
case FMT_GBYTE: case FMT_GBYTE:
case FMT_KIBYTE: case FMT_KIBYTE:
case FMT_MIBYTE: case FMT_MIBYTE:
case FMT_GIBYTE: { case FMT_GIBYTE: {
const long divider = format == FMT_KBYTE ? 1024 const long divider =
: format == FMT_MBYTE ? 1024 * 1024 format == FMT_BYTE
: format == FMT_GBYTE ? 1024 * 1024 * 1024 ? 8
: format == FMT_KIBYTE ? 1000 : format == FMT_KBYTE
: format == FMT_MIBYTE ? 1000 * 1000 ? 1024
: format == FMT_GIBYTE ? 1000 * 1000 * 1000 : 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; : 1;
value /= divider; value /= divider;
fmt = zero_pad ? "%0*lu" : "%*lu"; fmt = zero_pad ? "%0*lu" : "%*lu";