sites

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

dwm-sgrstatus256-20220223-6.3.diff (3430B)


      1 From 7be41dd26e562072afc11621432aa71d2ea5622a Mon Sep 17 00:00:00 2001
      2 From: Santtu Lakkala <inz@inz.fi>
      3 Date: Wed, 23 Feb 2022 16:22:59 +0200
      4 Subject: [PATCH 2/2] 256 colors SGR support
      5 
      6 ---
      7  dwm.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
      8  1 file changed, 64 insertions(+), 3 deletions(-)
      9 
     10 diff --git a/dwm.c b/dwm.c
     11 index cb9484a..e2dc586 100644
     12 --- a/dwm.c
     13 +++ b/dwm.c
     14 @@ -264,7 +264,7 @@ static Atom wmatom[WMLast], netatom[NetLast];
     15  static int running = 1;
     16  static Cur *cursor[CurLast];
     17  static Clr **scheme;
     18 -static Clr *barclrs;
     19 +static Clr barclrs[256];
     20  static Display *dpy;
     21  static Drw *drw;
     22  static Monitor *mons, *selmon;
     23 @@ -804,8 +804,25 @@ drawbar(Monitor *m)
     24  					lp = 0;
     25  
     26  					char *ep = stext + rd + 1;
     27 +					int ignore = 0;
     28 +					int bgfg = 0;
     29  					while (*ep != 'm') {
     30  						unsigned v = strtoul(ep + 1, &ep, 10);
     31 +						if (ignore)
     32 +							continue;
     33 +						if (bgfg) {
     34 +							if (bgfg < 4 && v == 5) {
     35 +								bgfg <<= 1;
     36 +								continue;
     37 +							}
     38 +							if (bgfg == 4)
     39 +								scm[0] = barclrs[fg = v];
     40 +							else if (bgfg == 6)
     41 +								scm[1] = barclrs[bg = v];
     42 +							ignore = 1;
     43 +
     44 +							continue;
     45 +						}
     46  						if (v == 0) {
     47  							memcpy(scm, scheme[SchemeNorm], sizeof(scm));
     48  							fg = 7;
     49 @@ -850,9 +867,13 @@ drawbar(Monitor *m)
     50  						} else if (v >= 30 && v <= 37) {
     51  							fg = v % 10 | (fg & 8);
     52  							scm[0] = barclrs[fg];
     53 +						} else if (v == 38) {
     54 +							bgfg = 2;
     55  						} else if (v >= 40 && v <= 47) {
     56  							bg = v % 10;
     57  							scm[1] = barclrs[bg];
     58 +						} else if (v == 48) {
     59 +							bgfg = 3;
     60  						} else if (v == 53) {
     61  							fmt |= OVERLINE;
     62  						} else if (v == 55) {
     63 @@ -1701,12 +1722,19 @@ setmfact(const Arg *arg)
     64  	arrange(selmon);
     65  }
     66  
     67 +unsigned char
     68 +sixd_to_8bit(int x)
     69 +{
     70 +	return x == 0 ? 0 : 0x37 + 0x28 * x;
     71 +}
     72 +
     73  void
     74  setup(void)
     75  {
     76  	int i;
     77  	XSetWindowAttributes wa;
     78  	Atom utf8string;
     79 +	char cbuf[8];
     80  
     81  	/* clean up any zombies immediately */
     82  	sigchld(0);
     83 @@ -1746,9 +1774,42 @@ setup(void)
     84  	for (i = 0; i < LENGTH(colors); i++)
     85  		scheme[i] = drw_scm_create(drw, colors[i], 3);
     86  
     87 -	barclrs = ecalloc(LENGTH(barcolors), sizeof(Clr));
     88 -	for (i = 0; i < LENGTH(barcolors); i++)
     89 +	for (i = 0; i < LENGTH(barcolors) && i < LENGTH(barclrs); i++)
     90  		drw_clr_create(drw, &barclrs[i], barcolors[i]);
     91 +	if (i == 0)
     92 +		drw_clr_create(drw, &barclrs[i++], "#000000");
     93 +	for (; i < 7; i++) {
     94 +		snprintf(cbuf, sizeof(cbuf), "#%02x%02x%02x",
     95 +			 !!(i & 1) * 0x7f,
     96 +			 !!(i & 2) * 0x7f,
     97 +			 !!(i & 4) * 0x7f);
     98 +		drw_clr_create(drw, &barclrs[i], cbuf);
     99 +	}
    100 +	if (i == 7)
    101 +		drw_clr_create(drw, &barclrs[i++], "#000000");
    102 +	if (i == 8)
    103 +		drw_clr_create(drw, &barclrs[i++], "#333333");
    104 +	for (; i < 16; i++) {
    105 +		snprintf(cbuf, sizeof(cbuf), "#%02x%02x%02x",
    106 +			 !!(i & 1) * 0xff,
    107 +			 !!(i & 2) * 0xff,
    108 +			 !!(i & 4) * 0xff);
    109 +		drw_clr_create(drw, &barclrs[i], cbuf);
    110 +	}
    111 +	for (; i < 6 * 6 * 6 + 16; i++) {
    112 +		snprintf(cbuf, sizeof(cbuf), "#%02x%02x%02x",
    113 +			 sixd_to_8bit(((i - 16) / 36) % 6),
    114 +			 sixd_to_8bit(((i - 16) / 6) % 6),
    115 +			 sixd_to_8bit(((i - 16)) % 6));
    116 +		drw_clr_create(drw, &barclrs[i], cbuf);
    117 +	}
    118 +	for (; i < 256; i++) {
    119 +		snprintf(cbuf, sizeof(cbuf), "#%02x%02x%02x",
    120 +			 0x08 + (i - 6 * 6 * 6 - 16) * 0x0a,
    121 +			 0x08 + (i - 6 * 6 * 6 - 16) * 0x0a,
    122 +			 0x08 + (i - 6 * 6 * 6 - 16) * 0x0a);
    123 +		drw_clr_create(drw, &barclrs[i], cbuf);
    124 +	}
    125  
    126  	/* init bars */
    127  	updatebars();
    128 -- 
    129 2.32.0
    130