#ifdef NCURSES
#include <ncurses.h>
#endif
+#ifdef XOAP
+#include <libxml/parser.h>
+#endif /* XOAP */
/* local headers */
#include "algebra.h"
free(data.weather.data_type);
break;
#endif
+#ifdef XOAP
+ case OBJ_weather_forecast:
+ free(data.weather_forecast.uri);
+ free(data.weather_forecast.data_type);
+ break;
+#endif
#ifdef HAVE_LUA
case OBJ_lua:
case OBJ_lua_parse:
current_text_color = obj->data.l;
}
#endif /* X11 */
+#ifdef NCURSES
+ if (output_methods & TO_NCURSES) {
+ obj->data.l = COLOR_WHITE;
+ if(arg) {
+ if(strcasecmp(arg, "red") == 0) {
+ obj->data.l = COLOR_RED;
+ }else if(strcasecmp(arg, "green") == 0) {
+ obj->data.l = COLOR_GREEN;
+ }else if(strcasecmp(arg, "yellow") == 0) {
+ obj->data.l = COLOR_YELLOW;
+ }else if(strcasecmp(arg, "blue") == 0) {
+ obj->data.l = COLOR_BLUE;
+ }else if(strcasecmp(arg, "magenta") == 0) {
+ obj->data.l = COLOR_MAGENTA;
+ }else if(strcasecmp(arg, "cyan") == 0) {
+ obj->data.l = COLOR_CYAN;
+ }else if(strcasecmp(arg, "black") == 0) {
+ obj->data.l = COLOR_BLACK;
+ }
+ }
+ current_text_color = obj->data.l;
+ init_pair(obj->data.l, obj->data.l, COLOR_BLACK);
+ }
+#endif /* NCURSES */
END OBJ(color0, 0)
obj->data.l = color0;
current_text_color = obj->data.l;
obj->type = OBJ_text;
return NULL;
}
- DBGP("parsed platform args: '%s' '%s' %d %f %f\n", buf1, buf2, n, factor, offset);
+ DBGP("parsed platform args: '%s' '%s' %d %f %f", buf1, buf2, n, factor, offset);
obj->data.sysfs.fd = open_platform_sensor((*buf1) ? buf1 : 0, buf2, n,
&obj->data.sysfs.arg, obj->data.sysfs.devtype);
strncpy(obj->data.sysfs.type, buf2, 63);
END OBJ(rss, 0)
if (arg) {
float interval = 0;
- int argc, act_par;
+ int argc, act_par = 0;
unsigned int nrspaces = 0;
char *uri = (char *) malloc(128 * sizeof(char));
char *action = (char *) malloc(64 * sizeof(char));
argc = sscanf(arg, "%119s %8s %31s %f", uri, locID, data_type, &interval);
if (argc >= 3) {
- if (process_weather_uri(uri, locID)) {
+ if (process_weather_uri(uri, locID, 0)) {
free(data_type);
free(uri);
free(locID);
CRIT_ERR(obj, free_at_crash, "weather needs arguments: <uri> <locID> <data_type> [interval in minutes]");
}
#endif
+#ifdef XOAP
+ END OBJ(weather_forecast, 0)
+ if (arg) {
+ int argc;
+ unsigned int day;
+ float interval = 0;
+ char *locID = (char *) malloc(9 * sizeof(char));
+ char *uri = (char *) malloc(128 * sizeof(char));
+ char *data_type = (char *) malloc(32 * sizeof(char));
+
+ argc = sscanf(arg, "%119s %8s %1u %31s %f", uri, locID, &day, data_type, &interval);
+
+ if (argc >= 4) {
+ if (process_weather_uri(uri, locID, 1)) {
+ free(data_type);
+ free(uri);
+ free(locID);
+ CRIT_ERR(obj, free_at_crash, \
+ "could not recognize the weather forecast uri");
+ }
+
+ obj->data.weather_forecast.uri = uri;
+ obj->data.weather_forecast.data_type = data_type;
+
+ /* Limit the day between 0 (today) and FORECAST_DAYS */
+ if (day >= FORECAST_DAYS) {
+ day = FORECAST_DAYS-1;
+ }
+ obj->data.weather_forecast.day = day;
+
+ /* Limit the data retrieval interval to 3 hours and an half */
+ if (interval < 210) {
+ interval = 210;
+ }
+
+ /* Convert to seconds */
+ obj->data.weather_forecast.interval = interval * 60;
+ free(locID);
+
+ DBGP("weather_forecast: fetching %s for day %d from %s every %d seconds", \
+ data_type, day, uri, obj->data.weather_forecast.interval);
+ } else {
+ free(data_type);
+ free(uri);
+ free(locID);
+ CRIT_ERR(obj, free_at_crash, "wrong number of arguments for $weather_forecast");
+ }
+ } else {
+ CRIT_ERR(obj, free_at_crash, "weather_forecast needs arguments: <uri> <locID> <day> <data_type> [interval in minutes]");
+ }
+#endif
#ifdef HAVE_LUA
END OBJ(lua, 0)
if (arg) {
new_graph(p, obj->a, obj->b, obj->c, obj->d, cur->loadavg[0],
obj->e, 1, obj->char_a, obj->char_b);
}
+#endif /* X11 */
OBJ(color) {
new_fg(p, obj->data.l);
}
+#ifdef X11
OBJ(color0) {
new_fg(p, color0);
}
}
}
#endif
+#ifdef XOAP
+ OBJ(weather_forecast) {
+ if (obj->data.weather_forecast.uri != NULL) {
+ weather_forecast_process_info(p, p_max_size, obj->data.weather_forecast.uri, obj->data.weather_forecast.day, obj->data.weather_forecast.data_type, obj->data.weather_forecast.interval);
+ } else {
+ NORM_ERR("error processing weather forecast data, check that you have a valid XOAP key if using XOAP.");
+ }
+ }
+#endif
#ifdef HAVE_LUA
OBJ(lua) {
char *str = llua_getstring(obj->data.s);
last_font_height = font_height();
return special_index;
}
+#endif /* X11 */
static inline void set_foreground_color(long c)
{
- if ((output_methods & TO_X) == 0)
- return;
- current_color = c;
- XSetForeground(display, window.gc, c);
-}
+#ifdef X11
+ if (output_methods & TO_X) {
+ current_color = c;
+ XSetForeground(display, window.gc, c);
+ }
#endif /* X11 */
+#ifdef NCURSES
+ if (output_methods & TO_NCURSES) {
+ attron(COLOR_PAIR(c));
+ }
+#endif /* NCURSES */
+ UNUSED(c);
+ return;
+}
static void draw_string(const char *s)
{
}
#ifdef NCURSES
if ((output_methods & TO_NCURSES) && draw_mode == FG) {
- printw("%s\n", s_with_newlines);
+ printw("%s", s_with_newlines);
}
#endif
free(s_with_newlines);
memcpy(tmpstring1, s, text_buffer_size);
}
-#ifdef X11
int draw_each_line_inner(char *s, int special_index, int last_special_applied)
{
+#ifdef X11
int font_h = font_height();
int cur_y_add = 0;
+#endif /* X11 */
char *recurse = 0;
char *p = s;
int last_special_needed = -1;
int orig_special_index = special_index;
+#ifdef X11
cur_x = text_start_x;
cur_y += font_ascent();
+#endif /* X11 */
while (*p) {
if (*p == SECRIT_MULTILINE_CHAR) {
break;
}
if (*p == SPECIAL_CHAR || last_special_applied > -1) {
+#ifdef X11
int w = 0;
+#endif /* X11 */
/* draw string before special, unless we're dealing multiline
* specials */
}
/* draw special */
switch (specials[special_index].type) {
+#ifdef X11
case HORIZONTAL_LINE:
{
int h = specials[special_index].height;
font_h = font_height();
break;
}
+#endif /* X11 */
case FG:
if (draw_mode == FG) {
set_foreground_color(specials[special_index].arg);
}
break;
+#ifdef X11
case BG:
if (draw_mode == BG) {
set_foreground_color(specials[special_index].arg);
last_special_needed = special_index;
break;
}
+#endif /* X11 */
}
+#ifdef X11
cur_x += w;
+#endif /* X11 */
if (special_index != last_special_applied) {
special_index++;
p++;
}
+#ifdef X11
cur_y += cur_y_add;
+#endif /* X11 */
draw_string(s);
+#ifdef NCURSES
+ if (output_methods & TO_NCURSES) {
+ printw("\n");
+ }
+#endif /* NCURSES */
+#ifdef X11
cur_y += font_descent();
+#endif /* X11 */
if (recurse && *recurse) {
special_index = draw_each_line_inner(recurse, special_index, last_special_needed);
*(recurse - 1) = SECRIT_MULTILINE_CHAR;
}
return special_index;
}
-#endif /* X11 */
static int draw_line(char *s, int special_index)
{
#ifdef X11
- if ((output_methods & TO_X) == 0) {
-#endif /* X11 */
- draw_string(s);
- //'special_index - special_index' instead of 0 otherwise gcc complains about not using special_index when build without X11
- return special_index - special_index;
-#ifdef X11
+ if (output_methods & TO_X) {
+ return draw_each_line_inner(s, special_index, -1);
}
-
- /* find specials and draw stuff */
- return draw_each_line_inner(s, special_index, -1);
#endif /* X11 */
+#ifdef NCURSES
+ if (output_methods & TO_NCURSES) {
+ return draw_each_line_inner(s, special_index, -1);
+ }
+#endif /* NCURSES */
+ draw_string(s);
+ UNUSED(special_index);
+ return 0;
}
static void draw_text(void)
}
setup_fonts();
#endif /* X11 */
+#ifdef NCURSES
+ init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK);
+ attron(COLOR_PAIR(COLOR_WHITE));
+#endif /* NCURSES */
for_each_line(text_buffer, draw_line);
#if defined(HAVE_LUA) && defined(X11)
llua_draw_post_hook();
/* resize window if it isn't right size */
if (!fixed_size
- && (text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2 != window.width
- || text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2 != window.height)) {
- window.width = text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2;
- window.height = text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2;
- XResizeWindow(display, window.window, window.width,
+ && (text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2 != window.width
+ || text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2 != window.height)) {
+ window.width = text_width + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2;
+ window.height = text_height + window.border_inner_margin * 2 + window.border_outer_margin * 2 + window.border_width * 2;
+ XResizeWindow(display, window.window, window.width,
window.height);
- set_transparent_background(window.window);
+ set_transparent_background(window.window);
- changed++;
+ changed++;
+#ifdef HAVE_LUA
+ /* update lua window globals */
+ llua_update_window_table(text_start_x, text_start_y, text_width, text_height);
+#endif /* HAVE_LUA */
}
/* move window if it isn't in right position */
changed++;
}
- /* update struts */
- if (changed && window.type == TYPE_PANEL) {
+ /* update struts */
+ if (changed && window.type == TYPE_PANEL) {
int sidenum = -1;
- fprintf(stderr, PACKAGE_NAME": defining struts\n");
- fflush(stderr);
+ fprintf(stderr, PACKAGE_NAME": defining struts\n");
+ fflush(stderr);
switch (text_alignment) {
case TOP_LEFT:
case TOP_RIGHT:
case TOP_MIDDLE:
- {
- sidenum = 2;
- break;
- }
+ {
+ sidenum = 2;
+ break;
+ }
case BOTTOM_LEFT:
case BOTTOM_RIGHT:
case BOTTOM_MIDDLE:
- {
- sidenum = 3;
- break;
- }
+ {
+ sidenum = 3;
+ break;
+ }
case MIDDLE_LEFT:
- {
- sidenum = 0;
- break;
- }
+ {
+ sidenum = 0;
+ break;
+ }
case MIDDLE_RIGHT:
- {
- sidenum = 1;
- break;
- }
+ {
+ sidenum = 1;
+ break;
+ }
}
set_struts(sidenum);
- }
+ }
}
#endif
case ButtonPress:
if (own_window) {
/* if an ordinary window with decorations */
- if ((window.type == TYPE_NORMAL)
- && (!TEST_HINT(window.hints,
- HINT_UNDECORATED))) {
+ if ((window.type == TYPE_NORMAL &&
+ (!TEST_HINT(window.hints,
+ HINT_UNDECORATED))) ||
+ window.type == TYPE_DESKTOP) {
/* allow conky to hold input focus. */
break;
} else {
#ifdef NCURSES
if(output_methods & TO_NCURSES) {
- delwin(stdscr);
endwin();
}
#endif
llua_shutdown_hook();
llua_close();
#endif /* HAVE_LUA */
+#ifdef IMLIB2
+ cimlib_deinit();
+#endif /* IMLIB2 */
+#ifdef XOAP
+ xmlCleanupParser();
+#endif /* XOAP */
if (specials) {
for (i = 0; i < special_count; i++) {
CONF("out_to_ncurses") {
if(string_to_bool(value)) {
initscr();
+ start_color();
output_methods |= TO_NCURSES;
}
}
CONF_ERR;
}
}
+ CONF("lua_startup_hook") {
+ if (value) {
+ llua_set_startup_hook(value);
+ } else {
+ CONF_ERR;
+ }
+ }
CONF("lua_shutdown_hook") {
if (value) {
llua_set_shutdown_hook(value);
#ifdef HAVE_LUA
llua_setup_info(&info, update_interval);
#endif /* HAVE_LUA */
+#ifdef XOAP
+ xmlInitParser();
+#endif /* XOAP */
/* Set signal handlers */
act.sa_handler = signal_handler;
NORM_ERR("error setting signal handler: %s", strerror(errno));
}
+#ifdef HAVE_LUA
+ llua_startup_hook();
+#endif /* HAVE_LUA */
}
int main(int argc, char **argv)