From 37e2bb471b08873eee421b9d4c4ec5cd7b7bd514 Mon Sep 17 00:00:00 2001 From: Nikolas Garofil Date: Mon, 3 Aug 2009 19:36:47 +0200 Subject: [PATCH] Support for in ncurses --- doc/variables.xml | 5 ++- src/conky.c | 93 ++++++++++++++++++++++++++++++++++++++--------- src/specials.c | 14 +++++-- 3 files changed, 90 insertions(+), 22 deletions(-) diff --git a/doc/variables.xml b/doc/variables.xml index b797373d..0b4a4f0b 100644 --- a/doc/variables.xml +++ b/doc/variables.xml @@ -540,7 +540,10 @@ - Change drawing color to color + Change drawing color to 'color' which is a name of + a color or a hexcode preceded with # (for example #0A1B2C ). + In ncurses the following colors are supported: + red,green,yellow,blue,magenta,cyan,black,white. diff --git a/src/conky.c b/src/conky.c index 86bdbb9a..7b5e1584 100644 --- a/src/conky.c +++ b/src/conky.c @@ -1780,6 +1780,30 @@ static struct text_object *construct_text_object(const char *s, 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; @@ -4098,9 +4122,11 @@ static void generate_text_internal(char *p, int p_max_size, 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); } @@ -6474,15 +6500,23 @@ static int text_size_updater(char *s, int special_index) 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 */ + return; +} static void draw_string(const char *s) { @@ -6519,7 +6553,7 @@ 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); @@ -6599,18 +6633,21 @@ static void draw_string(const char *s) 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) { @@ -6620,7 +6657,9 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied) 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 */ @@ -6634,6 +6673,7 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied) } /* draw special */ switch (specials[special_index].type) { +#ifdef X11 case HORIZONTAL_LINE: { int h = specials[special_index].height; @@ -6928,12 +6968,14 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied) 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); @@ -7015,9 +7057,12 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied) last_special_needed = special_index; break; } +#endif /* X11 */ } +#ifdef X11 cur_x += w; +#endif /* X11 */ if (special_index != last_special_applied) { special_index++; @@ -7029,31 +7074,40 @@ int draw_each_line_inner(char *s, int special_index, int last_special_applied) 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); + //'special_index - special_index' instead of 0 otherwise gcc complains about not using special_index when build without X11 + return special_index - special_index; } static void draw_text(void) @@ -7088,6 +7142,10 @@ 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(); @@ -8496,6 +8554,7 @@ char load_config_file(const char *f) CONF("out_to_ncurses") { if(string_to_bool(value)) { initscr(); + start_color(); output_methods |= TO_NCURSES; } } diff --git a/src/specials.c b/src/specials.c index a76cd417..71df3de0 100644 --- a/src/specials.c +++ b/src/specials.c @@ -351,15 +351,21 @@ void new_stippled_hr(char *buf, int a, int b) s->height = b; s->arg = a; } +#endif /* X11 */ void new_fg(char *buf, long c) { - if ((output_methods & TO_X) == 0) - return; - - new_special(buf, FG)->arg = c; +#ifdef X11 + if (output_methods & TO_X) + new_special(buf, FG)->arg = c; +#endif /* X11 */ +#ifdef NCURSES + if (output_methods & TO_NCURSES) + new_special(buf, FG)->arg = c; +#endif /* NCURSES */ } +#ifdef X11 void new_bg(char *buf, long c) { if ((output_methods & TO_X) == 0)