sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

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