mirror of
https://github.com/Llewellynvdm/conky.git
synced 2025-01-27 17:18:33 +00:00
Make execgraph working again (sf.net #3185428)
ps: the graph parsing code is a mess and in desperate need of a rewrite, that's why i'm not pushing this code to master, as it's only a stop-gap measure
This commit is contained in:
parent
b751e93291
commit
d6aab26cfa
11
src/exec.c
11
src/exec.c
@ -243,18 +243,17 @@ void scan_execi_arg(struct text_object *obj, const char *arg)
|
|||||||
void scan_execgraph_arg(struct text_object *obj, const char *arg)
|
void scan_execgraph_arg(struct text_object *obj, const char *arg)
|
||||||
{
|
{
|
||||||
struct execi_data *ed;
|
struct execi_data *ed;
|
||||||
char *buf;
|
|
||||||
|
|
||||||
ed = malloc(sizeof(struct execi_data));
|
ed = malloc(sizeof(struct execi_data));
|
||||||
memset(ed, 0, sizeof(struct execi_data));
|
memset(ed, 0, sizeof(struct execi_data));
|
||||||
|
|
||||||
buf = scan_graph(obj, arg, 100);
|
ed->cmd = scan_execgraph(obj, arg);
|
||||||
if (!buf) {
|
obj->data.opaque = ed;
|
||||||
|
|
||||||
|
if(! ed->cmd) {
|
||||||
NORM_ERR("missing command argument to execgraph object");
|
NORM_ERR("missing command argument to execgraph object");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ed->cmd = buf;
|
|
||||||
obj->data.opaque = ed;
|
|
||||||
}
|
}
|
||||||
#endif /* X11 */
|
#endif /* X11 */
|
||||||
|
|
||||||
@ -388,7 +387,7 @@ void print_execgraph(struct text_object *obj, char *p, int p_max_size)
|
|||||||
read_exec(ed->cmd, p, p_max_size, 1);
|
read_exec(ed->cmd, p, p_max_size, 1);
|
||||||
barnum = get_barnum(p);
|
barnum = get_barnum(p);
|
||||||
|
|
||||||
if (barnum > 0) {
|
if (barnum >= 0) {
|
||||||
new_graph(obj, p, p_max_size, round_to_int(barnum));
|
new_graph(obj, p, p_max_size, round_to_int(barnum));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include "logging.h"
|
#include "logging.h"
|
||||||
#include "specials.h"
|
#include "specials.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
/* maximum number of special things, e.g. fonts, offsets, aligns, etc. */
|
/* maximum number of special things, e.g. fonts, offsets, aligns, etc. */
|
||||||
int max_specials = MAX_SPECIALS_DEFAULT;
|
int max_specials = MAX_SPECIALS_DEFAULT;
|
||||||
@ -215,20 +216,6 @@ char *scan_graph(struct text_object *obj, const char *args, int defscale)
|
|||||||
sscanf(args, "%1023s %d,%d", buf, &g->height, &g->width);
|
sscanf(args, "%1023s %d,%d", buf, &g->height, &g->width);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* escape quotes at end in case of execgraph */
|
|
||||||
if (*buf == '"') {
|
|
||||||
char *_ptr;
|
|
||||||
size_t _size;
|
|
||||||
if (_ptr = strrchr(args, '"')) {
|
|
||||||
_size = _ptr - args - 1;
|
|
||||||
}
|
|
||||||
_size = _size < 1024 ? _size : 1023;
|
|
||||||
strncpy(buf, args + 1, _size);
|
|
||||||
buf[_size] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef g
|
|
||||||
|
|
||||||
return strndup(buf, text_buffer_size);
|
return strndup(buf, text_buffer_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,6 +225,45 @@ char *scan_graph(struct text_object *obj, const char *args, int defscale)
|
|||||||
return strndup(buf, text_buffer_size);
|
return strndup(buf, text_buffer_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// scan_graph is a mess and it does not work for execgraph, so i'll just rewrite it for this case
|
||||||
|
char *scan_execgraph(struct text_object *obj, const char *arg)
|
||||||
|
{
|
||||||
|
struct graph *g;
|
||||||
|
|
||||||
|
g = malloc(sizeof(struct graph));
|
||||||
|
memset(g, 0, sizeof(struct graph));
|
||||||
|
obj->special_data = g;
|
||||||
|
|
||||||
|
/* zero width means all space that is available */
|
||||||
|
g->width = default_graph_width;
|
||||||
|
g->height = default_graph_height;
|
||||||
|
g->first_colour = 0;
|
||||||
|
g->last_colour = 0;
|
||||||
|
g->scale = 100;
|
||||||
|
g->tempgrad = FALSE;
|
||||||
|
g->showaslog = FALSE;
|
||||||
|
|
||||||
|
while(arg && *arg) {
|
||||||
|
while(isspace(*arg)) ++arg;
|
||||||
|
|
||||||
|
if(strncmp(arg, TEMPGRAD, strlen(TEMPGRAD)) == 0 && !isalnum(arg[strlen(TEMPGRAD)])) {
|
||||||
|
g->tempgrad = TRUE;
|
||||||
|
arg += strlen(TEMPGRAD);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strncmp(arg, LOGGRAPH, strlen(LOGGRAPH)) == 0 && !isalnum(arg[strlen(LOGGRAPH)])) {
|
||||||
|
g->showaslog = TRUE;
|
||||||
|
arg += strlen(LOGGRAPH);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return strdup(arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
#endif /* X11 */
|
#endif /* X11 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -99,6 +99,7 @@ const char *scan_gauge(struct text_object *, const char *);
|
|||||||
#ifdef X11
|
#ifdef X11
|
||||||
char *scan_font(const char *);
|
char *scan_font(const char *);
|
||||||
char *scan_graph(struct text_object *, const char *, int);
|
char *scan_graph(struct text_object *, const char *, int);
|
||||||
|
char *scan_execgraph(struct text_object *obj, const char *arg);
|
||||||
void scan_tab(struct text_object *, const char *);
|
void scan_tab(struct text_object *, const char *);
|
||||||
void scan_stippled_hr(struct text_object *, const char*);
|
void scan_stippled_hr(struct text_object *, const char*);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user