only use colors if supported
[smdp.git] / viewer.c
index 7f1fb85..fd62cff 100644 (file)
--- a/viewer.c
+++ b/viewer.c
@@ -4,7 +4,7 @@
  * faded in 256 color mode.
  * Copyright (C) 2014 Michael Goehler
  *
- * This file is part of mpd.
+ * This file is part of mdp.
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -116,9 +116,11 @@ int ncurses_display(deck_t *deck, int notrans, int nofade) {
         start_color();
         use_default_colors();
 
-        if(notrans) trans = 0; // 0 is black
+        if(notrans) trans = 0; // black in 8 color mode
 
         if(COLORS == 256) {
+            if(notrans) trans = 16; // black in 256 color mode
+
             // 256 color mode
             init_pair(CP_WHITE, 255, trans);
             init_pair(CP_BLUE, 123, trans);
@@ -189,7 +191,7 @@ int ncurses_display(deck_t *deck, int notrans, int nofade) {
 
         // print lines
         while(line) {
-            add_line(content, l, (COLS - max_cols) / 2, line, max_cols);
+            add_line(content, l, (COLS - max_cols) / 2, line, max_cols, colors);
             line = line->next;
             l++;
         }
@@ -309,7 +311,7 @@ int ncurses_display(deck_t *deck, int notrans, int nofade) {
     return(0);
 }
 
-void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols) {
+void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colors) {
     int i = 0; // increment
     char *c; // char pointer for iteration
     char *special = "\\*_"; // list of interpreted chars
@@ -317,7 +319,6 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols) {
 
     if(line->text->text) {
         int offset = 0; // text offset
-        offset = next_nonblank(line->text, 0);
 
         // IS_CODE
         if(CHECK_BIT(line->bits, IS_CODE)) {
@@ -339,7 +340,8 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols) {
             if(CHECK_BIT(line->bits, IS_H1) || CHECK_BIT(line->bits, IS_H2)) {
 
                 // set headline color
-                wattron(window, COLOR_PAIR(CP_BLUE));
+                if(colors)
+                    wattron(window, COLOR_PAIR(CP_BLUE));
 
                 // enable underline for H1
                 if(CHECK_BIT(line->bits, IS_H1))
@@ -392,7 +394,8 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols) {
                                     break;
                                 // disable highlight
                                 case '*':
-                                    wattron(window, COLOR_PAIR(CP_WHITE));
+                                    if(colors)
+                                        wattron(window, COLOR_PAIR(CP_WHITE));
                                     break;
                                 // disable underline
                                 case '_':
@@ -415,7 +418,8 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols) {
                             switch(*c) {
                                 // enable highlight
                                 case '*':
-                                    wattron(window, COLOR_PAIR(CP_RED));
+                                    if(colors)
+                                        wattron(window, COLOR_PAIR(CP_RED));
                                     break;
                                 // enable underline
                                 case '_':
@@ -439,17 +443,16 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols) {
                 // pop stack until empty to prevent formated trailing spaces
                 while(!(stack->empty)(stack)) {
                     switch((stack->pop)(stack)) {
-                        case '\\':
-                            wprintw(window, "%c", '\\');
-                            break;
                         // disable highlight
                         case '*':
-                            wattron(window, COLOR_PAIR(CP_WHITE));
+                            if(colors)
+                                wattron(window, COLOR_PAIR(CP_WHITE));
                             break;
                         // disable underline
                         case '_':
                             wattroff(window, A_UNDERLINE);
                             break;
+                        // do nothing for backslashes
                     }
                 }
             }
@@ -460,7 +463,8 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols) {
             wprintw(window, "%s", " ");
 
         // reset to default color
-        wattron(window, COLOR_PAIR(CP_WHITE));
+        if(colors)
+            wattron(window, COLOR_PAIR(CP_WHITE));
         wattroff(window, A_UNDERLINE);
         wattroff(window, A_REVERSE);
     }