From 49d8b5ad876401a92efbd604d15abe1f54f79790 Mon Sep 17 00:00:00 2001 From: Peter Valach Date: Tue, 3 Feb 2026 19:35:03 +0100 Subject: [slstatus-limit][PATCH] add second format for values above given limit --- config.def.h | 8 ++++++-- slstatus.c | 14 +++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/config.def.h b/config.def.h index 100093e..655d713 100644 --- a/config.def.h +++ b/config.def.h @@ -65,6 +65,10 @@ static const char unknown_str[] = "n/a"; * wifi_perc WiFi signal in percent interface name (wlan0) */ static const struct arg args[] = { - /* function format argument */ - { datetime, "%s", "%F %T" }, + /* function format argument limit limit_format */ + { datetime, "%s", "%F %T", 0, NULL }, + + /* example of different format above limit (both format strings can contain anything your status supports, including icons and colors) + { ram_perc, "RAM: %s%%", "", 90, "RAM OVER LIMIT: %s%%" }, + */ }; diff --git a/slstatus.c b/slstatus.c index 16d88fe..7e6f670 100644 --- a/slstatus.c +++ b/slstatus.c @@ -15,6 +15,8 @@ struct arg { const char *(*func)(const char *); const char *fmt; const char *args; + long limit; + const char *limit_fmt; }; char buf[1024]; @@ -49,6 +51,8 @@ main(int argc, char *argv[]) { struct sigaction act; struct timespec start, current, diff, intspec, wait; + long val; + const char *fmt; size_t i, len; int sflag, ret; char status[MAXLEN]; @@ -91,8 +95,16 @@ main(int argc, char *argv[]) if (!(res = args[i].func(args[i].args))) res = unknown_str; + if (args[i].limit && + (val = strtol(res, NULL, 10)) > args[i].limit && + args[i].limit_fmt) { + fmt = args[i].limit_fmt; + } else { + fmt = args[i].fmt; + } + if ((ret = esnprintf(status + len, sizeof(status) - len, - args[i].fmt, res)) < 0) + fmt, res)) < 0) break; len += ret; -- 2.43.0