[wiki] [sites] remove a github snippet paste link and replace it by the actual file || Josuah Demangeon

From: <git_AT_suckless.org>
Date: Sun, 06 Jan 2019 03:05:11 +0100

commit 33b99f222e8885786a1ce7b9bba1caf94c6e9689
Author: Josuah Demangeon <mail_AT_josuah.net>
Date: Sun Jan 6 03:03:25 2019 +0100

    remove a github snippet paste link and replace it by the actual file
    
    There is an ongoing conversation on the gist, but suckless developement happen
    at suckless.org as there is a whole dedicated infrastructure here.

diff --git a/dwm.suckless.org/patches/historical/ansistatuscolors.png b/dwm.suckless.org/patches/historical/ansistatuscolors.png
deleted file mode 100644
index a4eeba43..00000000
Binary files a/dwm.suckless.org/patches/historical/ansistatuscolors.png and /dev/null differ
diff --git a/dwm.suckless.org/patches/historical/ansistatuscolors/dwm-ansistatuscolors-5.9.diff b/dwm.suckless.org/patches/historical/ansistatuscolors/dwm-ansistatuscolors-5.9.diff
new file mode 100644
index 00000000..c6c67c77
--- /dev/null
+++ b/dwm.suckless.org/patches/historical/ansistatuscolors/dwm-ansistatuscolors-5.9.diff
_AT_@ -0,0 +1,510 @@
+--- dwm.c 2011-07-10 15:24:25.000000000 -0500
++++ dwm-ansistatuscolors.c 2012-11-12 22:59:41.975424068 -0600
+_AT_@ -53,6 +53,7 @@
+ #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
+ #define TAGMASK ((1 << LENGTH(tags)) - 1)
+ #define TEXTW(X) (textnw(X, strlen(X)) + dc.font.height)
++#define STATUS_BUF_LEN 8192 //la11111
+
+ /* enums */
+ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
+_AT_@ -247,7 +248,7 @@
+
+ /* variables */
+ static const char broken[] = "broken";
+-static char stext[256];
++static char stext[STATUS_BUF_LEN]; //la11111
+ static int screen;
+ static int sw, sh; /* X display screen geometry width, height */
+ static int bh, blw = 0; /* bar geometry */
+_AT_@ -282,6 +283,24 @@
+ /* compile-time check if all tags fit into an unsigned int bit array. */
+ struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
+
++//////////////////////////// la11111
++enum { ansi_reset, ansi_fg, ansi_bg, ansi_text, ansi_last};
++
++struct ansi_node {
++ int type;
++ char * color;
++ char * text;
++ struct ansi_node *next;
++};
++
++static void drawcoloredtext(const char *text, unsigned long fg, unsigned long bg);
++static void ParseAnsiEsc(char * seq, char buffer[]);
++static void GetAnsiColor(int escapecode, char buffer[]);
++static int countchars(char c, char * buf);
++static struct ansi_node * addnode(struct ansi_node *head, int type, char * color, char * text);
++static void destroy_llist(struct ansi_node *head);
++static void drawstatus(Monitor *m);
++///////////////////////////////
+ /* function implementations */
+ void
+ applyrules(Client *c) {
+_AT_@ -747,13 +766,8 @@
+ dc.x += dc.w;
+ x = dc.x;
+ if(m == selmon) { /* status is only drawn on selected monitor */
+- dc.w = TEXTW(stext);
+- dc.x = m->ww - dc.w;
+- if(dc.x < x) {
+- dc.x = x;
+- dc.w = m->ww - x;
+- }
+- drawtext(stext, dc.norm, False);
++
++ drawstatus(m); //la11111
+ }
+ else
+ dc.x = m->ww;
+_AT_@ -2067,3 +2081,449 @@
+ XCloseDisplay(dpy);
+ return EXIT_SUCCESS;
+ }
++
++
++/*************************************************
++ansistatuscolors
++by la11111
++
++updated 11.12.12 - squashed my code together to
++patch better across versions - killed remaining memory
++leaks. removed some useless junk.
++
++put ansi escape codes in your status bar output to
++change the color. Note: full ansi spec not implemented
++at the moment. incorrect codes are ignored, even if they
++may be valid ansi codes (ie, changing up the order or something)
++
++*** escape code format:
++
++\e[<code>m
++
++ \e - ascii 27, hex 0x1b, octal 033
++ [ - literal bracket
++ m - literal 'm'
++
++*** codes supported:
++
++standard escape codes:
++
++n;m
++ n -
++ 0 - normal
++ 1 - 'bright'
++ m -
++ 30-37 - text foreground
++ 40-47 - text background
++
++0 -
++ reset formatting to default
++
++example (python):
++ print "\x1b[1;31mHello World!\x1b[0m"
++
++256-color escape codes (xterm):
++
++n;5;m
++ n -
++ 38 - text foreground
++ 48 - text background
++ m -
++ 0-15 - alias classic ansi colors
++ 16-231 - rgb grid color
++ 232-255 - grayscale ramp color
++
++example (python):
++ print "\x1b[38;5;196mHello World!\x1b[0m"
++
++for more info about escape sequences in general, see:
++http://www.frexx.de/xterm-256-notes/
++
++enjoy, my friends
++-la0x1f
++***************************************************/
++
++void
++drawcoloredtext(const char *text, unsigned long fg, unsigned long bg) {
++ char buf[256];
++ int x, y, h, olen, len;
++
++ XSetForeground(dpy, dc.gc, bg);
++
++ XFillRectangle(dpy, dc.drawable, dc.gc, dc.x, dc.y, dc.w, dc.h);
++ if(!text)
++ return;
++ olen = strlen(text);
++ h = dc.font.ascent + dc.font.descent;
++ y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
++ x = dc.x;
++ for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w; len--);
++ if(!len)
++ return;
++ memcpy(buf, text, len);
++
++ XSetForeground(dpy, dc.gc, fg);
++ if(dc.font.set)
++ XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
++ else
++ XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
++}
++
++struct
++ansi_node * addnode(struct ansi_node *head, int type, char * color, char * text) {
++ struct ansi_node* tmp;
++ if (head == NULL) {
++ head=(struct ansi_node *)malloc(sizeof(struct ansi_node));
++ if (head == NULL) {
++ // printf("you're out of memory, son
");
++ exit(1);
++ }
++ head->next = head;
++ head->type = type;
++ head->color = color;
++ head->text = text;
++ } else {
++ tmp = head;
++ while(tmp->next != head)
++ tmp = tmp->next;
++ tmp->next = (struct ansi_node *)malloc(sizeof(struct ansi_node));
++ if (tmp->next == NULL) {
++ // printf("you're out of memory, son
");
++ exit(1);
++ }
++ tmp = tmp->next;
++ tmp->next = head;
++ tmp->type = type;
++ tmp->color = color;
++ tmp->text = text;
++ }
++ return head;
++}
++
++void
++destroy_llist(struct ansi_node *head) {
++ struct ansi_node *current, *tmp;
++ current = head->next;
++ head->next = NULL;
++ while (current != NULL) {
++ tmp = current->next;
++ free(current);
++ current = tmp;
++ }
++}
++
++void
++drawstatus (Monitor *m) {
++ /*
++ this function makes 2 passes:
++ -chops status text into pieces based on esc codes
++ -puts esc codes & text blocks in a linked list
++ -goes back through and outputs those blocks one at a time
++ in the color specified by the preceding escape code
++ */
++ char * startpos = stext;
++ char * curpos = stext;
++ char * escstartpos = stext;
++ int inescape = 0;
++ int esc_len, text_len;
++ char * textbuf;
++ char * escbuf;
++ char plaintextbuf[1024] = "++ char color[16];
++ char * color_ptr;
++ int curpos_ctr = 0;
++ int input_len = strlen(stext);
++ int plain_text_len = 0;
++ unsigned long cur_fg = dc.norm[ColFG];
++ unsigned long cur_bg = dc.norm[ColBG];
++ struct ansi_node *head = NULL;
++ int x, x_orig;
++ struct ansi_node *curn;
++
++
++ while (curpos_ctr < input_len) {
++ if (*curpos == '\x1b') {
++ if (!(inescape)) {
++ inescape = 1;
++ escstartpos = curpos;
++ curpos++;
++ curpos_ctr++;
++ if (*curpos != '[') {
++ escstartpos = startpos;
++ inescape = 0;
++ } else {
++ curpos++;
++ curpos_ctr++;
++ }
++ } else {
++ escstartpos = startpos;
++ inescape = 0;
++ }
++ } else {
++ if (inescape) {
++ if ( ((*curpos >= '0' ) && (*curpos <= '9')) || (*curpos == ';') ) {
++ curpos++;
++ curpos_ctr++;
++ } else {
++ if (*curpos == 'm') {
++ esc_len = curpos - escstartpos;
++ escbuf = malloc(esc_len-1);
++ if (escbuf) { strncpy(escbuf, escstartpos+2, esc_len-2); }
++ escbuf[esc_len-2] = '++ ParseAnsiEsc(escbuf, color);
++ free(escbuf);
++ text_len= escstartpos - startpos;
++ if (text_len > 0) {
++ plain_text_len += text_len;
++ textbuf = malloc((text_len * sizeof(char))+ 1);
++ if (textbuf) { strncpy(textbuf, startpos, text_len);}
++ textbuf[text_len] = '++ strcat(plaintextbuf, textbuf);
++ head = addnode(head, ansi_text, "", strcpy(malloc(strlen(textbuf)+1), textbuf));
++ free(textbuf);
++ }
++ color_ptr = color;
++ if (color[0] == 'r') {
++ head = addnode(head, ansi_reset, strcpy( malloc(strlen(color)+1), color), "");
++ } else if (color[0] == 'f') { //chops off 'fg:'
++ head = addnode(head, ansi_fg, strcpy( malloc(strlen(color)-2), color_ptr+3),"");
++ } else if (color[0] == 'b') {
++ head = addnode(head, ansi_bg, strcpy(malloc(strlen(color)-2),color_ptr+3), "");
++ } else {
++ head = addnode(head, -1, "", "");
++ }
++ curpos++;
++ startpos = curpos;
++ escstartpos = curpos;
++ } else {
++ escstartpos = startpos;
++ curpos++;
++ curpos_ctr++;
++ }
++ inescape = 0;
++ }
++ } else {
++ curpos++;
++ curpos_ctr++;
++ }
++ }
++ }
++ if(strlen(startpos)) {
++ text_len= strlen(startpos);
++ textbuf = malloc((text_len * sizeof(char))+ 1);
++ if (textbuf) { strncpy(textbuf, startpos, text_len);}
++ textbuf[text_len] = '++ plain_text_len += strlen(startpos);
++ strcat(plaintextbuf, startpos);
++ head = addnode(head, ansi_text, "", strcpy(malloc(strlen(textbuf)+1), textbuf));
++ free(textbuf);
++ }
++ x = dc.x;
++ dc.x = m->ww - textnw(plaintextbuf, strlen(plaintextbuf));
++ // not sure what would happen here... something wierd probably
++ if(dc.x < x) {
++ dc.x = x;
++ dc.w = m->ww - x;
++ }
++ x_orig = dc.x; //reset dc.x after so the window title doesn't overwrite status
++ curn = head; //iterate linked list
++ if (curn != NULL) {
++ do {
++ if (curn->type == -1) continue;
++ if (curn->type == ansi_reset) {
++ cur_fg = dc.norm[ColFG];
++ cur_bg = dc.norm[ColBG];
++ free(curn->color);
++ } else if (curn->type == ansi_fg) {
++ cur_fg = getcolor(curn->color);
++ free(curn->color);
++ } else if (curn->type == ansi_bg) {
++ cur_bg = getcolor(curn->color);
++ free(curn->color);
++ } else if (curn->type == ansi_text) {
++ dc.w = textnw(curn->text, strlen(curn->text));
++ drawcoloredtext(curn->text, cur_fg, cur_bg);
++ dc.x += dc.w;
++
++ free(curn->text);
++
++
++
++ } else {
++ continue;
++ }
++ curn = curn->next;
++ } while (curn != head);
++ }
++ dc.x = x_orig;
++ destroy_llist(head);
++}
++
++int //count occurrences of c in buf
++countchars(char c, char * buf) {
++ char *ptr = buf;
++ int ctr = 0;
++ while(*ptr) {
++ if(*ptr == c) ctr++;
++ ptr++;
++ }
++ return ctr;
++}
++
++void
++ParseAnsiEsc(char * seq, char buffer[]){
++ char *cp, *token;
++ static char * standardcolors[2][8] = {
++ {"#000000++ {"#808080++ };
++ char * retbuf = (void *)buffer;
++ retbuf[0] = '++
++ cp = malloc(strlen(seq) + 1);
++ if (cp) { strcpy(cp, seq); }
++
++ int semis = countchars(';',seq);
++ char *delim = ";";
++ char * toklist[semis + 1];
++ int tok_ctr = 0;
++ int arglist[semis + 1];
++ char color[8];
++ int r,c,i,j;
++ char * layer;
++
++ token = strtok(cp,delim);
++ while(token) {
++ toklist[tok_ctr] = token;
++ tok_ctr++;
++ token = strtok(NULL,delim);
++ }
++ if ((tok_ctr > 3) || (tok_ctr < 1)) {
++ free(cp);
++ return;
++ }
++ if (tok_ctr == 1) {
++ if (strlen(toklist[0]) != 1) return;
++ if (toklist[0][0] != '0') {
++ free(cp);
++ return;
++ } else {
++ sprintf(retbuf,"r"); //reset to default
++ free(cp);
++ return;
++ }
++ }
++ for (i=0; i < tok_ctr; i++) {
++ for(j=0; j < strlen(toklist[i]); j++){
++ if ((toklist[i][j] < '0') || (toklist[i][j] > '9')) {
++ free(cp);
++ return;
++ }
++ }
++ arglist[i] = atoi(toklist[i]);
++ }
++ if (tok_ctr == 3) {
++ if (!(
++ (arglist[1] == 5) &&
++ ((arglist[0] == 38) || (arglist[0] == 48)) &&
++ (arglist[2] >= 16) &&
++ (arglist[2] <= 255)
++ )) {
++ free(cp);
++ return;
++ } else {
++ if (arglist[0] == 38) {
++ sprintf(retbuf,"fg:");
++ } else {
++ sprintf(retbuf,"bg:");
++ }
++
++ GetAnsiColor(arglist[2], color);
++ strcat(retbuf, color);
++ free(cp);
++ return;
++ }
++ } else {
++ for (i = 0; i < tok_ctr; i++) {
++ if (!(
++ (arglist[i] == 0) ||
++ (arglist[i] == 1) ||
++ ((arglist[i] >= 30) && (arglist[i] <= 37)) ||
++ ((arglist[i] >= 40) && (arglist[i] <= 47))
++ )) {
++ free(cp);
++ return;
++ }
++ }
++ if ((arglist[0] < 30)
++ && (arglist[1] < 30)) {
++ free(cp);
++ return;
++ }
++ if ((arglist[0] > 1)
++ && (arglist[1] > 1)) {
++ free(cp);
++ return;
++ }
++ if (arglist[0] < 30) {
++ r = arglist[0];
++ c = arglist[1];
++ } else {
++ r = arglist[1];
++ c = arglist[0];
++ }
++ if (c > 37) {
++ layer = "bg:";
++ c -= 10;
++ } else {
++ layer = "fg:";
++ }
++ sprintf(retbuf, "%s%s", layer, standardcolors[r][c-30]);
++ free(cp);
++ }
++}
++
++void
++GetAnsiColor(int escapecode, char buffer[]){
++ char steps[6][3] = {
++ "00++ };
++ int i, panel, cell, col, row, val;
++ int cmin = 16;
++ int cmax = 231;
++ int gmax = 255;
++ int n = escapecode;
++ char * retbuf = (void *)buffer;
++
++ if (n < cmin) {
++ return;
++ } else if (n > gmax) {
++ return;
++ } else if (n <= cmax) {
++ i = n - 15;
++ panel = i / 36;
++ cell = i % 36;
++ if (cell == 0) {
++ cell = 36;
++ panel -= 1;
++ }
++ col = cell / 6;
++ row = cell % 6;
++ if (row == 0) {
++ col -= 1;
++ row = 5;
++ } else {
++ row -= 1;
++ }
++ sprintf(retbuf, "#%s%s%s", steps[panel], steps[col], steps[row]);
++ } else {
++ val = ((10*(n-232))+8);
++ sprintf(retbuf, "#%.2x%.2x%.2x",val,val,val);
++ }
++}
++
++/*************************************************
++end ansistatuscolors - la11111
++***************************************************/
++
++
diff --git a/dwm.suckless.org/patches/historical/ansistatuscolors/dwm-ansistatuscolors-6.0.diff b/dwm.suckless.org/patches/historical/ansistatuscolors/dwm-ansistatuscolors-6.0.diff
new file mode 100644
index 00000000..994d2151
--- /dev/null
+++ b/dwm.suckless.org/patches/historical/ansistatuscolors/dwm-ansistatuscolors-6.0.diff
_AT_@ -0,0 +1,510 @@
+--- dwm.c.orig 2011-12-19 09:02:46.000000000 -0600
++++ dwm.c 2012-11-12 23:04:14.383441523 -0600
+_AT_@ -54,6 +54,7 @@
+ #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
+ #define TAGMASK ((1 << LENGTH(tags)) - 1)
+ #define TEXTW(X) (textnw(X, strlen(X)) + dc.font.height)
++#define STATUS_BUF_LEN 8192 //la11111
+
+ /* enums */
+ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
+_AT_@ -254,7 +255,7 @@
+
+ /* variables */
+ static const char broken[] = "broken";
+-static char stext[256];
++static char stext[STATUS_BUF_LEN]; //la11111
+ static int screen;
+ static int sw, sh; /* X display screen geometry width, height */
+ static int bh, blw = 0; /* bar geometry */
+_AT_@ -290,6 +291,24 @@
+ /* compile-time check if all tags fit into an unsigned int bit array. */
+ struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
+
++//////////////////////////// la11111
++enum { ansi_reset, ansi_fg, ansi_bg, ansi_text, ansi_last};
++
++struct ansi_node {
++ int type;
++ char * color;
++ char * text;
++ struct ansi_node *next;
++};
++
++static void drawcoloredtext(const char *text, unsigned long fg, unsigned long bg);
++static void ParseAnsiEsc(char * seq, char buffer[]);
++static void GetAnsiColor(int escapecode, char buffer[]);
++static int countchars(char c, char * buf);
++static struct ansi_node * addnode(struct ansi_node *head, int type, char * color, char * text);
++static void destroy_llist(struct ansi_node *head);
++static void drawstatus(Monitor *m);
++///////////////////////////////
+ /* function implementations */
+ void
+ applyrules(Client *c) {
+_AT_@ -741,13 +760,8 @@
+ dc.x += dc.w;
+ x = dc.x;
+ if(m == selmon) { /* status is only drawn on selected monitor */
+- dc.w = TEXTW(stext);
+- dc.x = m->ww - dc.w;
+- if(dc.x < x) {
+- dc.x = x;
+- dc.w = m->ww - x;
+- }
+- drawtext(stext, dc.norm, False);
++
++ drawstatus(m); //la11111
+ }
+ else
+ dc.x = m->ww;
+_AT_@ -2144,3 +2158,449 @@
+ XCloseDisplay(dpy);
+ return EXIT_SUCCESS;
+ }
++
++
++/*************************************************
++ansistatuscolors
++by la11111
++
++updated 11.12.12 - squashed my code together to
++patch better across versions - killed remaining memory
++leaks. removed some useless junk.
++
++put ansi escape codes in your status bar output to
++change the color. Note: full ansi spec not implemented
++at the moment. incorrect codes are ignored, even if they
++may be valid ansi codes (ie, changing up the order or something)
++
++*** escape code format:
++
++\e[<code>m
++
++ \e - ascii 27, hex 0x1b, octal 033
++ [ - literal bracket
++ m - literal 'm'
++
++*** codes supported:
++
++standard escape codes:
++
++n;m
++ n -
++ 0 - normal
++ 1 - 'bright'
++ m -
++ 30-37 - text foreground
++ 40-47 - text background
++
++0 -
++ reset formatting to default
++
++example (python):
++ print "\x1b[1;31mHello World!\x1b[0m"
++
++256-color escape codes (xterm):
++
++n;5;m
++ n -
++ 38 - text foreground
++ 48 - text background
++ m -
++ 0-15 - alias classic ansi colors
++ 16-231 - rgb grid color
++ 232-255 - grayscale ramp color
++
++example (python):
++ print "\x1b[38;5;196mHello World!\x1b[0m"
++
++for more info about escape sequences in general, see:
++http://www.frexx.de/xterm-256-notes/
++
++enjoy, my friends
++-la0x1f
++***************************************************/
++
++void
++drawcoloredtext(const char *text, unsigned long fg, unsigned long bg) {
++ char buf[256];
++ int x, y, h, olen, len;
++
++ XSetForeground(dpy, dc.gc, bg);
++
++ XFillRectangle(dpy, dc.drawable, dc.gc, dc.x, dc.y, dc.w, dc.h);
++ if(!text)
++ return;
++ olen = strlen(text);
++ h = dc.font.ascent + dc.font.descent;
++ y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
++ x = dc.x;
++ for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w; len--);
++ if(!len)
++ return;
++ memcpy(buf, text, len);
++
++ XSetForeground(dpy, dc.gc, fg);
++ if(dc.font.set)
++ XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
++ else
++ XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
++}
++
++struct
++ansi_node * addnode(struct ansi_node *head, int type, char * color, char * text) {
++ struct ansi_node* tmp;
++ if (head == NULL) {
++ head=(struct ansi_node *)malloc(sizeof(struct ansi_node));
++ if (head == NULL) {
++ // printf("you're out of memory, son
");
++ exit(1);
++ }
++ head->next = head;
++ head->type = type;
++ head->color = color;
++ head->text = text;
++ } else {
++ tmp = head;
++ while(tmp->next != head)
++ tmp = tmp->next;
++ tmp->next = (struct ansi_node *)malloc(sizeof(struct ansi_node));
++ if (tmp->next == NULL) {
++ // printf("you're out of memory, son
");
++ exit(1);
++ }
++ tmp = tmp->next;
++ tmp->next = head;
++ tmp->type = type;
++ tmp->color = color;
++ tmp->text = text;
++ }
++ return head;
++}
++
++void
++destroy_llist(struct ansi_node *head) {
++ struct ansi_node *current, *tmp;
++ current = head->next;
++ head->next = NULL;
++ while (current != NULL) {
++ tmp = current->next;
++ free(current);
++ current = tmp;
++ }
++}
++
++void
++drawstatus (Monitor *m) {
++ /*
++ this function makes 2 passes:
++ -chops status text into pieces based on esc codes
++ -puts esc codes & text blocks in a linked list
++ -goes back through and outputs those blocks one at a time
++ in the color specified by the preceding escape code
++ */
++ char * startpos = stext;
++ char * curpos = stext;
++ char * escstartpos = stext;
++ int inescape = 0;
++ int esc_len, text_len;
++ char * textbuf;
++ char * escbuf;
++ char plaintextbuf[1024] = "++ char color[16];
++ char * color_ptr;
++ int curpos_ctr = 0;
++ int input_len = strlen(stext);
++ int plain_text_len = 0;
++ unsigned long cur_fg = dc.norm[ColFG];
++ unsigned long cur_bg = dc.norm[ColBG];
++ struct ansi_node *head = NULL;
++ int x, x_orig;
++ struct ansi_node *curn;
++
++
++ while (curpos_ctr < input_len) {
++ if (*curpos == '\x1b') {
++ if (!(inescape)) {
++ inescape = 1;
++ escstartpos = curpos;
++ curpos++;
++ curpos_ctr++;
++ if (*curpos != '[') {
++ escstartpos = startpos;
++ inescape = 0;
++ } else {
++ curpos++;
++ curpos_ctr++;
++ }
++ } else {
++ escstartpos = startpos;
++ inescape = 0;
++ }
++ } else {
++ if (inescape) {
++ if ( ((*curpos >= '0' ) && (*curpos <= '9')) || (*curpos == ';') ) {
++ curpos++;
++ curpos_ctr++;
++ } else {
++ if (*curpos == 'm') {
++ esc_len = curpos - escstartpos;
++ escbuf = malloc(esc_len-1);
++ if (escbuf) { strncpy(escbuf, escstartpos+2, esc_len-2); }
++ escbuf[esc_len-2] = '++ ParseAnsiEsc(escbuf, color);
++ free(escbuf);
++ text_len= escstartpos - startpos;
++ if (text_len > 0) {
++ plain_text_len += text_len;
++ textbuf = malloc((text_len * sizeof(char))+ 1);
++ if (textbuf) { strncpy(textbuf, startpos, text_len);}
++ textbuf[text_len] = '++ strcat(plaintextbuf, textbuf);
++ head = addnode(head, ansi_text, "", strcpy(malloc(strlen(textbuf)+1), textbuf));
++ free(textbuf);
++ }
++ color_ptr = color;
++ if (color[0] == 'r') {
++ head = addnode(head, ansi_reset, strcpy( malloc(strlen(color)+1), color), "");
++ } else if (color[0] == 'f') { //chops off 'fg:'
++ head = addnode(head, ansi_fg, strcpy( malloc(strlen(color)-2), color_ptr+3),"");
++ } else if (color[0] == 'b') {
++ head = addnode(head, ansi_bg, strcpy(malloc(strlen(color)-2),color_ptr+3), "");
++ } else {
++ head = addnode(head, -1, "", "");
++ }
++ curpos++;
++ startpos = curpos;
++ escstartpos = curpos;
++ } else {
++ escstartpos = startpos;
++ curpos++;
++ curpos_ctr++;
++ }
++ inescape = 0;
++ }
++ } else {
++ curpos++;
++ curpos_ctr++;
++ }
++ }
++ }
++ if(strlen(startpos)) {
++ text_len= strlen(startpos);
++ textbuf = malloc((text_len * sizeof(char))+ 1);
++ if (textbuf) { strncpy(textbuf, startpos, text_len);}
++ textbuf[text_len] = '++ plain_text_len += strlen(startpos);
++ strcat(plaintextbuf, startpos);
++ head = addnode(head, ansi_text, "", strcpy(malloc(strlen(textbuf)+1), textbuf));
++ free(textbuf);
++ }
++ x = dc.x;
++ dc.x = m->ww - textnw(plaintextbuf, strlen(plaintextbuf));
++ // not sure what would happen here... something wierd probably
++ if(dc.x < x) {
++ dc.x = x;
++ dc.w = m->ww - x;
++ }
++ x_orig = dc.x; //reset dc.x after so the window title doesn't overwrite status
++ curn = head; //iterate linked list
++ if (curn != NULL) {
++ do {
++ if (curn->type == -1) continue;
++ if (curn->type == ansi_reset) {
++ cur_fg = dc.norm[ColFG];
++ cur_bg = dc.norm[ColBG];
++ free(curn->color);
++ } else if (curn->type == ansi_fg) {
++ cur_fg = getcolor(curn->color);
++ free(curn->color);
++ } else if (curn->type == ansi_bg) {
++ cur_bg = getcolor(curn->color);
++ free(curn->color);
++ } else if (curn->type == ansi_text) {
++ dc.w = textnw(curn->text, strlen(curn->text));
++ drawcoloredtext(curn->text, cur_fg, cur_bg);
++ dc.x += dc.w;
++
++ free(curn->text);
++
++
++
++ } else {
++ continue;
++ }
++ curn = curn->next;
++ } while (curn != head);
++ }
++ dc.x = x_orig;
++ destroy_llist(head);
++}
++
++int //count occurrences of c in buf
++countchars(char c, char * buf) {
++ char *ptr = buf;
++ int ctr = 0;
++ while(*ptr) {
++ if(*ptr == c) ctr++;
++ ptr++;
++ }
++ return ctr;
++}
++
++void
++ParseAnsiEsc(char * seq, char buffer[]){
++ char *cp, *token;
++ static char * standardcolors[2][8] = {
++ {"#000000++ {"#808080++ };
++ char * retbuf = (void *)buffer;
++ retbuf[0] = '++
++ cp = malloc(strlen(seq) + 1);
++ if (cp) { strcpy(cp, seq); }
++
++ int semis = countchars(';',seq);
++ char *delim = ";";
++ char * toklist[semis + 1];
++ int tok_ctr = 0;
++ int arglist[semis + 1];
++ char color[8];
++ int r,c,i,j;
++ char * layer;
++
++ token = strtok(cp,delim);
++ while(token) {
++ toklist[tok_ctr] = token;
++ tok_ctr++;
++ token = strtok(NULL,delim);
++ }
++ if ((tok_ctr > 3) || (tok_ctr < 1)) {
++ free(cp);
++ return;
++ }
++ if (tok_ctr == 1) {
++ if (strlen(toklist[0]) != 1) return;
++ if (toklist[0][0] != '0') {
++ free(cp);
++ return;
++ } else {
++ sprintf(retbuf,"r"); //reset to default
++ free(cp);
++ return;
++ }
++ }
++ for (i=0; i < tok_ctr; i++) {
++ for(j=0; j < strlen(toklist[i]); j++){
++ if ((toklist[i][j] < '0') || (toklist[i][j] > '9')) {
++ free(cp);
++ return;
++ }
++ }
++ arglist[i] = atoi(toklist[i]);
++ }
++ if (tok_ctr == 3) {
++ if (!(
++ (arglist[1] == 5) &&
++ ((arglist[0] == 38) || (arglist[0] == 48)) &&
++ (arglist[2] >= 16) &&
++ (arglist[2] <= 255)
++ )) {
++ free(cp);
++ return;
++ } else {
++ if (arglist[0] == 38) {
++ sprintf(retbuf,"fg:");
++ } else {
++ sprintf(retbuf,"bg:");
++ }
++
++ GetAnsiColor(arglist[2], color);
++ strcat(retbuf, color);
++ free(cp);
++ return;
++ }
++ } else {
++ for (i = 0; i < tok_ctr; i++) {
++ if (!(
++ (arglist[i] == 0) ||
++ (arglist[i] == 1) ||
++ ((arglist[i] >= 30) && (arglist[i] <= 37)) ||
++ ((arglist[i] >= 40) && (arglist[i] <= 47))
++ )) {
++ free(cp);
++ return;
++ }
++ }
++ if ((arglist[0] < 30)
++ && (arglist[1] < 30)) {
++ free(cp);
++ return;
++ }
++ if ((arglist[0] > 1)
++ && (arglist[1] > 1)) {
++ free(cp);
++ return;
++ }
++ if (arglist[0] < 30) {
++ r = arglist[0];
++ c = arglist[1];
++ } else {
++ r = arglist[1];
++ c = arglist[0];
++ }
++ if (c > 37) {
++ layer = "bg:";
++ c -= 10;
++ } else {
++ layer = "fg:";
++ }
++ sprintf(retbuf, "%s%s", layer, standardcolors[r][c-30]);
++ free(cp);
++ }
++}
++
++void
++GetAnsiColor(int escapecode, char buffer[]){
++ char steps[6][3] = {
++ "00++ };
++ int i, panel, cell, col, row, val;
++ int cmin = 16;
++ int cmax = 231;
++ int gmax = 255;
++ int n = escapecode;
++ char * retbuf = (void *)buffer;
++
++ if (n < cmin) {
++ return;
++ } else if (n > gmax) {
++ return;
++ } else if (n <= cmax) {
++ i = n - 15;
++ panel = i / 36;
++ cell = i % 36;
++ if (cell == 0) {
++ cell = 36;
++ panel -= 1;
++ }
++ col = cell / 6;
++ row = cell % 6;
++ if (row == 0) {
++ col -= 1;
++ row = 5;
++ } else {
++ row -= 1;
++ }
++ sprintf(retbuf, "#%s%s%s", steps[panel], steps[col], steps[row]);
++ } else {
++ val = ((10*(n-232))+8);
++ sprintf(retbuf, "#%.2x%.2x%.2x",val,val,val);
++ }
++}
++
++/*************************************************
++end ansistatuscolors - la11111
++***************************************************/
++
++
diff --git a/dwm.suckless.org/patches/historical/ansistatuscolors/index.md b/dwm.suckless.org/patches/historical/ansistatuscolors/index.md
index 6ea9f5e9..a1323760 100644
--- a/dwm.suckless.org/patches/historical/ansistatuscolors/index.md
+++ b/dwm.suckless.org/patches/historical/ansistatuscolors/index.md
_AT_@ -94,7 +94,8 @@ My battery is discharging and my wifi signal is iffy...
 
 Download
 --------
-* [
+* [dwm-ansistatuscolors-5.9.diff][dwm-ansistatuscolors-5.9.diff]
+* [dwm-ansistatuscolors-6.0.diff][dwm-ansistatuscolors-6.0.diff]
 
 Author
 ------
Received on Sun Jan 06 2019 - 03:05:11 CET

This archive was generated by hypermail 2.3.0 : Sun Jan 06 2019 - 03:12:25 CET