yum, net graphs
authorBrenden Matthews <brenden1@rty.ca>
Sat, 30 Jul 2005 11:23:26 +0000 (11:23 +0000)
committerBrenden Matthews <brenden1@rty.ca>
Sat, 30 Jul 2005 11:23:26 +0000 (11:23 +0000)
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky@28 7f574dfc-610e-0410-a909-a81674777703

ChangeLog
README
common.c
conky.c
conky.h
conkyrc.sample

index d286a47..b97659b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-07-30
+       * finalized graphing code, see $cpugraph, $memgraph, $execgraph,
+       $downspeedgraph, and $upspeedgraph
+       * added override_utf8_locale option
+       * poop
+
 2005-07-28
        * Added new graphing code, such as $cpugraph
        * small fixes all round
diff --git a/README b/README
index 32ed1f1..2068c7f 100644 (file)
--- a/README
+++ b/README
@@ -93,6 +93,7 @@
    mldonkey_login        Mldonkey login, default none
    mldonkey_password     Mldonkey password, default none
    net_avg_samples       The number of samples to average for net data
+   override_utf8_locale  Force UTF8? requires XFT
    own_window            Boolean, create own window to draw?                  
    pad_percents          Pad percentages to this many decimals (0 = no        
                          padding)                                             
   color             (color)         Change drawing color to color            
   cpu                               CPU usage in percents                    
   cpubar            (height)        Bar that shows CPU usage, height is      
-                                    bar's height in pixels                   
+                                    bar's height in pixels                 
+  cpugraph          (height),(width)CPU usage graph
   downspeed         net             Download speed in kilobytes              
   downspeedf        net             Download speed in kilobytes with one     
                                     decimal                                  
+  downspeedgraph    net (height),(width) Download speed graph
   exec              shell command   Executes a shell command and displays    
                                     the output in conky. warning: this      
                                     takes a lot more resources than other    
                                     will use that number for a bar.
                                     The size for the bar is currently fixed,
                                     but that may change in the future.
+  execgraph         shell command   Same as execbar, but graphs values
   execi             interval, shell Same as exec but with specific interval. 
                     command         Interval can't be less than              
                                     update_interval in configuration.        
   upspeed           net             Upload speed in kilobytes                
   upspeedf          net             Upload speed in kilobytes with one       
                                     decimal                                  
+  upspeedgraph      net (height),(width) Upload speed graph
   uptime                            Uptime                                   
   uptime_short                      Uptime in a shorter format               
 
index 326af72..c51133e 100644 (file)
--- a/common.c
+++ b/common.c
@@ -146,7 +146,7 @@ void format_seconds_short(char *buf, unsigned int n, long t)
 static double last_meminfo_update;
 static double last_fs_update;
 
-unsigned int need_mask;
+unsigned long long need_mask;
 
 void update_stuff()
 {
diff --git a/conky.c b/conky.c
index 243fd15..0bea1d1 100644 (file)
--- a/conky.c
+++ b/conky.c
@@ -242,8 +242,8 @@ static struct special_t *new_special(char *buf, int t)
        buf[0] = SPECIAL_CHAR;
        buf[1] = '\0';
        if (t == GRAPH && specials[special_count].graph == NULL) {
-               if (specials[special_count].height > 0 && specials[special_count].height < MAX_GRAPH_DEPTH)
-                       specials[special_count].graph_width = specials[special_count].height;
+               if (specials[special_count].width > 0 && specials[special_count].width < MAX_GRAPH_DEPTH)
+                       specials[special_count].graph_width = specials[special_count].width - 3; // subtract 3 for the box
                else
                        specials[special_count].graph_width = MAX_GRAPH_DEPTH;
                specials[special_count].graph = calloc(specials[special_count].graph_width, sizeof(double));
@@ -310,13 +310,14 @@ inline void graph_append(struct special_t *graph, double f) {
        if (graph->scaled) {
                graph->graph_scale = 0;
        }
+       graph->graph[graph->graph_width-1] = f;
        for (i=0;i<graph->graph_width-1;i++) {
                graph->graph[i] = graph->graph[i+1];
                if (graph->scaled && graph->graph[i] > graph->graph_scale) {
                        graph->graph_scale = graph->graph[i];
                }
        }
-       graph->graph[graph->graph_width-1] = f;
+//     graph->graph[graph->graph_width-1] = f;
 }
 
 static void new_graph(char *buf, int w, int h, double i, int scaled)
@@ -325,8 +326,11 @@ static void new_graph(char *buf, int w, int h, double i, int scaled)
        s->width = w;
        s->height = h;
        s->scaled = scaled;
+       if (s->width) {
+               s->graph_width = s->width - 3; // subtract 3 for rectangle around
+       }
        if (scaled) {
-               s->graph_scale = 0;
+               s->graph_scale = 1;
        }
        else {
                s->graph_scale = 100;
@@ -342,8 +346,8 @@ static const char *scan_graph(const char *args, int *w, int *h)
        if (args) {
                int n = 0;
                if (sscanf(args, "%d,%d %n", h, w, &n) <= 1)
-                       sscanf(args, "%d %n", h, &n);
-               args += n;
+                       sscanf(args, "%*s %d %n", h, &n);
+               //args += n;
        }
 
        return args;
@@ -574,6 +578,7 @@ enum text_object_type {
 
 struct text_object {
        int type;
+       int a, b;
        union {
                char *s;        /* some string */
                int i;          /* some integer */
@@ -626,7 +631,6 @@ struct text_object {
                struct {
                        int a, b;
                } pair;         /* 2 */
-               
        } data;
 };
 
@@ -742,8 +746,16 @@ static void construct_text_object(const char *s, const char *arg)
        END OBJ(downspeed, INFO_NET) obj->data.net = get_net_stat(arg);
        END OBJ(downspeedf, INFO_NET) obj->data.net = get_net_stat(arg);
        END OBJ(downspeedgraph, INFO_NET)
-                       obj->data.net = get_net_stat(arg);
-                       (void) scan_graph("", &obj->data.pair.a, &obj->data.pair.b);
+                       (void) scan_graph(arg, &obj->a, &obj->b);
+                       char buf[64];
+                       sscanf(arg, "%63s %*i,%*i %*i", buf);
+                       obj->data.net = get_net_stat(buf);
+                       if (sscanf(arg, "%*s %d,%d %*d", &obj->a, &obj->b) <= 1) {
+                               if (sscanf(arg, "%*s %d,%d", &obj->a, &obj->b) <= 1) {
+                                       obj->a = 0;
+                                       obj->b = 25;
+                               }
+                       }
        END OBJ(else, 0)
            if (blockdepth) {
                text_objects[blockstart[blockdepth - 1] -
@@ -1121,7 +1133,16 @@ static void construct_text_object(const char *s, const char *arg)
        END OBJ(upspeed, INFO_NET) obj->data.net = get_net_stat(arg);
        END OBJ(upspeedf, INFO_NET) obj->data.net = get_net_stat(arg);
        END OBJ(upspeedgraph, INFO_NET)
-                       (void) scan_graph(arg, &obj->data.pair.a, &obj->data.pair.b);
+                       (void) scan_graph(arg, &obj->a, &obj->b);
+       char buf[64];
+       sscanf(arg, "%63s %*i,%*i %*i", buf);
+       obj->data.net = get_net_stat(buf);
+       if (sscanf(arg, "%*s %d,%d %*d", &obj->a, &obj->b) <= 1) {
+               if (sscanf(arg, "%*s %d,%d", &obj->a, &obj->b) <= 1) {
+                       obj->a = 0;
+                       obj->b = 25;
+               }
+       }
        END OBJ(uptime_short, INFO_UPTIME) END OBJ(uptime, INFO_UPTIME) END
            OBJ(adt746xcpu, 0) END OBJ(adt746xfan, 0) END
 #ifdef SETI
@@ -1402,8 +1423,7 @@ static void generate_text()
                                                 recv_speed / 1024.0);
                        }
                        OBJ(downspeedgraph) {
-                               CRIT_ERR("the net graph stuff is broken right now.  don't use it.");
-                               new_graph(p, obj->data.pair.a, obj->data.pair.b, (obj->data.net->recv_speed / 1024.0), 1);
+                               new_graph(p, obj->a, obj->b, (obj->data.net->recv_speed / 1024.0), 1);
                        }
                        OBJ(else) {
                                if (!if_jumped) {
@@ -1934,11 +1954,8 @@ static void generate_text()
                                                 trans_speed / 1024.0);
                        }
                        OBJ(upspeedgraph) {
-                               CRIT_ERR("the net graph stuff is broken right now.  don't use it.");
-                               new_graph(p, obj->data.pair.a,
-                                         obj->data.pair.b,
-                                         (obj->data.net->trans_speed / 1024.0), 1);
-               }
+                               new_graph(p, obj->a, obj->b, (obj->data.net->trans_speed / 1024.0), 1);
+                       }
                        OBJ(uptime_short) {
                                format_seconds_short(p, n,
                                                     (int) cur->uptime);
@@ -2692,17 +2709,12 @@ static void draw_line(char *s)
                                        int by =
                                                        cur_y - (font_ascent() +
                                                        h) / 2 - 1;
-                                       int line;
                                        w = specials[special_index].width;
                                        if (w == 0)
                                                w = text_start_x +
                                                                text_width - cur_x - 1;
                                        if (w < 0)
                                                w = 0;
-                                       if (w >= specials[special_index].graph_width)
-                                               line = w/specials[special_index].graph_width+1;
-                                       else
-                                               line = 1;
                                        XSetLineAttributes(display,
                                                        window.gc, 1,
                                                        LineSolid,
@@ -2713,13 +2725,21 @@ static void draw_line(char *s)
                                                        window.gc, cur_x,
                                                        by, w, h);
                                        XSetLineAttributes(display,
-                                                       window.gc, line,
+                                                       window.gc, 1,
                                                        LineSolid,
                                                        CapButt,
                                                        JoinMiter);
                                        int i;
-                                       for (i=0;i<specials[special_index].graph_width;i++) {
-                                               XDrawLine(display, window.drawable, window.gc, cur_x+(i*w*1.0/specials[special_index].graph_width)+2, by+h, cur_x+(i*w*1.0/specials[special_index].graph_width)+2, by+h-specials[special_index].graph[i]*h/specials[special_index].graph_scale); /* this is mugfugly, but it works */
+                                       int j=0;
+                                       for (i=0;i<w-3;i++) {
+                                               if (i / ((float)(w - 3) / (specials[special_index].graph_width)) > j) { 
+                                                       j++;
+                                               }
+                                               XDrawLine(display, window.drawable, window.gc,
+                                                               cur_x+i+2, by+h,
+                                                               cur_x+i+2,
+                                                               by+h-specials[special_index].graph[j]*h/specials[special_index]
+                                                                               .graph_scale); /* this is mugfugly, but it works */
                                        }
                                        if (specials[special_index].height > font_h) {
                                                cur_y += specials[special_index].height;
@@ -3519,6 +3539,12 @@ else if (strcasecmp(name, a) == 0 || strcasecmp(name, a) == 0)
 
 
 
+                                                                               CONF("override_utf8_locale") {
+                                                                               utf8_mode
+                                                                               =
+                                                                               string_to_bool
+                                                                               (value);
+                                                                               }
 #ifdef XDBE
                                                                                                                CONF("double_buffer") {
                                                                                                                use_xdbe
diff --git a/conky.h b/conky.h
index 61786a3..9de7e5d 100644 (file)
--- a/conky.h
+++ b/conky.h
@@ -237,7 +237,7 @@ struct net_stat *get_net_stat(const char *dev);
 void update_stuff();
 
 #define SET_NEED(a) need_mask |= 1 << (a)
-extern unsigned int need_mask;
+extern unsigned long long need_mask;
 
 extern double current_update_time, last_update_time;
 
index 3bd621d..4b62974 100644 (file)
@@ -98,6 +98,10 @@ cpu_avg_samples 4
 # set to 1 to disable averaging
 net_avg_samples 4
 
+# Force UTF8? note that UTF8 support required XFT
+override_utf8_locale no 
+
+
 # Add spaces to keep things from moving about?  This only affects certain objects.
 use_spacer no
 
@@ -139,9 +143,11 @@ metar_station  CYBW
 #  cpu                               CPU usage in percents                    
 #  cpubar            (height)        Bar that shows CPU usage, height is      
 #                                    bar's height in pixels                   
+#  cpugraph          (height),(width)CPU usage graph
 #  downspeed         net             Download speed in kilobytes              
 #  downspeedf        net             Download speed in kilobytes with one     
 #                                    decimal                                  
+#  downspeedgraph    net (height),(width) Download speed graph
 #  exec              shell command   Executes a shell command and displays    
 #                                    the output in conky. warning: this      
 #                                    takes a lot more resources than other    
@@ -152,6 +158,7 @@ metar_station  CYBW
 #                                    will use that number for a bar.
 #                                    The size for the bar is currently fixed,
 #                                    but that may change in the future.
+#  execgraph         shell command   Same as execbar, but graphs values
 #  execi             interval, shell Same as exec but with specific interval. 
 #                    command         Interval can't be less than              
 #                                    update_interval in configuration.        
@@ -277,6 +284,7 @@ metar_station  CYBW
 #  upspeed           net             Upload speed in kilobytes                
 #  upspeedf          net             Upload speed in kilobytes with one       
 #                                    decimal                                  
+#  upspeedgraph      net (height),(width) Upload speed graph
 #  uptime                            Uptime                                   
 #  uptime_short                      Uptime in a shorter format               
 #