slstatus-limit-20260203-49d8b5a.diff (2045B)
1 From 49d8b5ad876401a92efbd604d15abe1f54f79790 Mon Sep 17 00:00:00 2001 2 From: Peter Valach <pvx@gmx.net> 3 Date: Tue, 3 Feb 2026 19:35:03 +0100 4 Subject: [slstatus-limit][PATCH] add second format for values above given limit 5 6 --- 7 config.def.h | 8 ++++++-- 8 slstatus.c | 14 +++++++++++++- 9 2 files changed, 19 insertions(+), 3 deletions(-) 10 11 diff --git a/config.def.h b/config.def.h 12 index 100093e..655d713 100644 13 --- a/config.def.h 14 +++ b/config.def.h 15 @@ -65,6 +65,10 @@ static const char unknown_str[] = "n/a"; 16 * wifi_perc WiFi signal in percent interface name (wlan0) 17 */ 18 static const struct arg args[] = { 19 - /* function format argument */ 20 - { datetime, "%s", "%F %T" }, 21 + /* function format argument limit limit_format */ 22 + { datetime, "%s", "%F %T", 0, NULL }, 23 + 24 + /* example of different format above limit (both format strings can contain anything your status supports, including icons and colors) 25 + { ram_perc, "RAM: %s%%", "", 90, "RAM OVER LIMIT: %s%%" }, 26 + */ 27 }; 28 diff --git a/slstatus.c b/slstatus.c 29 index 16d88fe..7e6f670 100644 30 --- a/slstatus.c 31 +++ b/slstatus.c 32 @@ -15,6 +15,8 @@ struct arg { 33 const char *(*func)(const char *); 34 const char *fmt; 35 const char *args; 36 + long limit; 37 + const char *limit_fmt; 38 }; 39 40 char buf[1024]; 41 @@ -49,6 +51,8 @@ main(int argc, char *argv[]) 42 { 43 struct sigaction act; 44 struct timespec start, current, diff, intspec, wait; 45 + long val; 46 + const char *fmt; 47 size_t i, len; 48 int sflag, ret; 49 char status[MAXLEN]; 50 @@ -91,8 +95,16 @@ main(int argc, char *argv[]) 51 if (!(res = args[i].func(args[i].args))) 52 res = unknown_str; 53 54 + if (args[i].limit && 55 + (val = strtol(res, NULL, 10)) > args[i].limit && 56 + args[i].limit_fmt) { 57 + fmt = args[i].limit_fmt; 58 + } else { 59 + fmt = args[i].fmt; 60 + } 61 + 62 if ((ret = esnprintf(status + len, sizeof(status) - len, 63 - args[i].fmt, res)) < 0) 64 + fmt, res)) < 0) 65 break; 66 67 len += ret; 68 -- 69 2.43.0 70