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)