changeset 1268:dbc907b2d92f

Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
author Mikael Berthe <mikael@lilotux.net>
date Mon, 20 Aug 2007 19:41:31 +0200
parents c5257cbe6ae4
children 6495aa83d059
files mcabber/mcabberrc.example mcabber/src/commands.c mcabber/src/hbuf.c mcabber/src/hbuf.h mcabber/src/jab_iq.c mcabber/src/screen.c mcabber/src/screen.h
diffstat 7 files changed, 94 insertions(+), 54 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/mcabberrc.example	Mon Aug 20 19:08:31 2007 +0200
+++ b/mcabber/mcabberrc.example	Mon Aug 20 19:41:31 2007 +0200
@@ -249,6 +249,8 @@
 #
 # background: background color of the chat window and the log window
 # general:    text color in the chat window and the log window
+# info:       text color in the chat window for info messages
+# msgin:      text color in the chat window for incoming messages
 # msgout:     text color in the chat window for outgoing messages
 # msghl:      text color in the chat window for highlighted messages (MUC)
 # bgstatus:   background color of the status lines
@@ -261,6 +263,8 @@
 #
 #set color_background   = black
 #set color_general      = white
+#set color_info	 = white
+#set color_msgin        = white
 #set color_msgout       = cyan
 #set color_msghl        = yellow
 #set color_bgstatus     = blue
--- a/mcabber/src/commands.c	Mon Aug 20 19:08:31 2007 +0200
+++ b/mcabber/src/commands.c	Mon Aug 20 19:41:31 2007 +0200
@@ -521,7 +521,7 @@
   gchar tbuf[128];
   GString *sbuf;
   guint msg_flag = HBB_PREFIX_INFO;
-  /* We use the flag prefix_info for the first line, and prefix_none
+  /* We use the flag prefix_info for the first line, and prefix_cont
      for the other lines, for better readability */
 
   if (!note)
@@ -533,7 +533,7 @@
     // We're writing to the status window, so let's show the jid too.
     g_string_printf(sbuf, "Annotation on <%s>", note->jid);
     scr_WriteIncomingMessage(winId, sbuf->str, 0, msg_flag);
-    msg_flag = HBB_PREFIX_NONE;
+    msg_flag = HBB_PREFIX_INFO | HBB_PREFIX_CONT;
   }
 
   // If we have the creation date, display it
@@ -542,7 +542,7 @@
              localtime(&note->cdate));
     g_string_printf(sbuf, "Note created  %s", tbuf);
     scr_WriteIncomingMessage(winId, sbuf->str, 0, msg_flag);
-    msg_flag = HBB_PREFIX_NONE;
+    msg_flag = HBB_PREFIX_INFO | HBB_PREFIX_CONT;
   }
   // If we have the modification date, display it
   // unless it's the same as the creation date
@@ -551,7 +551,7 @@
              localtime(&note->mdate));
     g_string_printf(sbuf, "Note modified %s", tbuf);
     scr_WriteIncomingMessage(winId, sbuf->str, 0, msg_flag);
-    msg_flag = HBB_PREFIX_NONE;
+    msg_flag = HBB_PREFIX_INFO | HBB_PREFIX_CONT;
   }
   // Note text
   g_string_printf(sbuf, "Note: %s", note->text);
@@ -1402,25 +1402,29 @@
       scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
       if (rst_msg) {
         snprintf(buffer, 4095, "Status message: %s", rst_msg);
-        scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
+        scr_WriteIncomingMessage(bjid, buffer,
+                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
       }
       if (rst_time) {
         char tbuf[128];
 
         strftime(tbuf, sizeof(tbuf), "%Y-%m-%d %H:%M:%S", localtime(&rst_time));
         snprintf(buffer, 127, "Status timestamp: %s", tbuf);
-        scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
+        scr_WriteIncomingMessage(bjid, buffer,
+                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
       }
 #ifdef HAVE_GPGME
       if (rpgp && rpgp->sign_keyid) {
         snprintf(buffer, 4095, "PGP key id: %s", rpgp->sign_keyid);
-        scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
+        scr_WriteIncomingMessage(bjid, buffer,
+                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
         if (rpgp->last_sigsum) {
           gpgme_sigsum_t ss = rpgp->last_sigsum;
           snprintf(buffer, 4095, "Last PGP signature: %s",
                   (ss & GPGME_SIGSUM_GREEN ? "good":
                    (ss & GPGME_SIGSUM_RED ? "bad" : "unknown")));
-          scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
+          scr_WriteIncomingMessage(bjid, buffer,
+                                   0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
         }
       }
 #endif
@@ -1500,7 +1504,8 @@
       scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
       if (rst_msg && style == style_normal) {
         snprintf(buffer, 4095, "Status message: %s", rst_msg);
-        scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
+        scr_WriteIncomingMessage(bjid, buffer,
+                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
       }
     }
     g_free(p_res->data);
@@ -2264,27 +2269,29 @@
   scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
   snprintf(buffer, 4095, "Status   : [%c] %s", imstatus2char[rstatus],
            rst_msg);
-  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
+  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
 
   if (rst_time) {
     char tbuf[128];
 
     strftime(tbuf, sizeof(tbuf), "%Y-%m-%d %H:%M:%S", localtime(&rst_time));
     snprintf(buffer, 127, "Timestamp: %s", tbuf);
-    scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
+    scr_WriteIncomingMessage(bjid, buffer,
+                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
   }
 
   if (realjid) {
     snprintf(buffer, 4095, "JID      : <%s>", realjid);
-    scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
+    scr_WriteIncomingMessage(bjid, buffer,
+                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
   }
 
   snprintf(buffer, 4095, "Role     : %s", strrole[role]);
-  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
+  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
   snprintf(buffer, 4095, "Affiliat.: %s", straffil[affil]);
-  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
+  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
   snprintf(buffer, 4095, "Priority : %d", rprio);
-  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_NONE);
+  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
 
   scr_WriteIncomingMessage(bjid, "End of WHOIS", 0, HBB_PREFIX_INFO);
 
@@ -2345,7 +2352,8 @@
 
   for (bmp = bm; bmp; bmp = g_slist_next(bmp)) {
     g_string_printf(sbuf, "<%s>", (char*)bmp->data);
-    scr_WriteIncomingMessage(NULL, sbuf->str, 0, HBB_PREFIX_NONE);
+    scr_WriteIncomingMessage(NULL, sbuf->str,
+                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
   }
 
   scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE);
--- a/mcabber/src/hbuf.c	Mon Aug 20 19:08:31 2007 +0200
+++ b/mcabber/src/hbuf.c	Mon Aug 20 19:41:31 2007 +0200
@@ -149,6 +149,7 @@
     text = "[ERR:LINE_TOO_LONG]";
     hbuf_block_elt->prefix.flags |= HBB_PREFIX_INFO;
   }
+
   if (hbuf_block_elt->ptr + strlen(text) >= hbuf_block_elt->ptr_end_alloc) {
     // Too long for the current allocated bloc, we need another one
     if (!maxhbufblocks) {
@@ -327,7 +328,10 @@
       } else {
         // Propagate highlighting flags
         (*array_elt)->flags |= last_persist_prefixflags &
-                               (HBB_PREFIX_HLIGHT_OUT | HBB_PREFIX_HLIGHT);
+                               (HBB_PREFIX_HLIGHT_OUT | HBB_PREFIX_HLIGHT |
+                                HBB_PREFIX_INFO | HBB_PREFIX_IN);
+        //Continuation of a message - omit the prefix
+        (*array_elt)->flags |= HBB_PREFIX_CONT;
       }
 
       hbuf = g_list_next(hbuf);
--- a/mcabber/src/hbuf.h	Mon Aug 20 19:08:31 2007 +0200
+++ b/mcabber/src/hbuf.h	Mon Aug 20 19:41:31 2007 +0200
@@ -26,6 +26,7 @@
 #define HBB_PREFIX_NONE       (1U<<9)
 #define HBB_PREFIX_SPECIAL    (1U<<10)
 #define HBB_PREFIX_PGPCRYPT   (1U<<11)
+#define HBB_PREFIX_CONT       (1U<<12)
 
 typedef struct {
   time_t timestamp;
--- a/mcabber/src/jab_iq.c	Mon Aug 20 19:08:31 2007 +0200
+++ b/mcabber/src/jab_iq.c	Mon Aug 20 19:41:31 2007 +0200
@@ -354,19 +354,19 @@
   p = xmlnode_get_tag_data(ansqry, "name");
   if (p) {
     buf = g_strdup_printf("Name:    %s", p);
-    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
     g_free(buf);
   }
   p = xmlnode_get_tag_data(ansqry, "version");
   if (p) {
     buf = g_strdup_printf("Version: %s", p);
-    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
     g_free(buf);
   }
   p = xmlnode_get_tag_data(ansqry, "os");
   if (p) {
     buf = g_strdup_printf("OS:      %s", p);
-    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
     g_free(buf);
   }
   return 0;
@@ -419,19 +419,19 @@
   p = xmlnode_get_tag_data(ansqry, "utc");
   if (p) {
     buf = g_strdup_printf("UTC:  %s", p);
-    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
     g_free(buf);
   }
   p = xmlnode_get_tag_data(ansqry, "tz");
   if (p) {
     buf = g_strdup_printf("TZ:   %s", p);
-    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
     g_free(buf);
   }
   p = xmlnode_get_tag_data(ansqry, "display");
   if (p) {
     buf = g_strdup_printf("Time: %s", p);
-    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
     g_free(buf);
   }
   return 0;
@@ -496,11 +496,12 @@
     g_string_append_printf(sbuf, "%02ld:", s/3600L);
     s %= 3600L;
     g_string_append_printf(sbuf, "%02ld:%02ld", s/60L, s%60L);
-    scr_WriteIncomingMessage(bjid, sbuf->str, 0, HBB_PREFIX_NONE);
+    scr_WriteIncomingMessage(bjid, sbuf->str,
+                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
     g_string_free(sbuf, TRUE);
   } else {
     scr_WriteIncomingMessage(bjid, "No idle time reported.",
-                             0, HBB_PREFIX_NONE);
+                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
   }
   p = xmlnode_get_data(ansqry);
   if (p) {
@@ -540,7 +541,7 @@
                         (vcard_attrib & vcard_pref ? "[pref]" : ""),
                         (vcard_attrib ? " " : ""),
                         text);
-  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
+  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
   g_free(buf);
 }
 
--- a/mcabber/src/screen.c	Mon Aug 20 19:08:31 2007 +0200
+++ b/mcabber/src/screen.c	Mon Aug 20 19:41:31 2007 +0200
@@ -182,6 +182,8 @@
     "rostersel",
     "rosterselmsg",
     "rosternewmsg",
+    "info",
+    "msgin",
     NULL
   };
 
@@ -251,6 +253,14 @@
           init_pair(i+1, ((color) ? FindColor(color) : COLOR_RED),
                     FindColor(background));
           break;
+      case COLOR_INFO:
+          init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
+                    FindColor(background));
+          break;
+      case COLOR_MSGIN:
+          init_pair(i+1, ((color) ? FindColor(color) : COLOR_WHITE),
+                    FindColor(background));
+          break;
     }
   }
 }
@@ -673,42 +683,52 @@
         wattrset(win_entry->win, get_color(COLOR_MSGOUT));
       else if (line->flags & HBB_PREFIX_HLIGHT)
         wattrset(win_entry->win, get_color(COLOR_MSGHL));
-
-      if (line->timestamp && !(line->flags & HBB_PREFIX_SPECIAL)) {
+      else if (line->flags & HBB_PREFIX_INFO)
+        wattrset(win_entry->win, get_color(COLOR_INFO));
+      else if (line->flags & HBB_PREFIX_IN)
+        wattrset(win_entry->win, get_color(COLOR_MSGIN));
+
+      if (line->timestamp &&
+          !(line->flags & (HBB_PREFIX_SPECIAL|HBB_PREFIX_CONT))) {
         strftime(date, 30, "%m-%d %H:%M", localtime(&line->timestamp));
       } else
         strcpy(date, "           ");
-      if (line->flags & HBB_PREFIX_INFO) {
-        char dir = '*';
-        if (line->flags & HBB_PREFIX_IN)
-          dir = '<';
-        else if (line->flags & HBB_PREFIX_OUT)
-          dir = '>';
-        wprintw(win_entry->win, "%.11s *%c* ", date, dir);
-      } else if (line->flags & HBB_PREFIX_ERR) {
-        char dir = '#';
-        if (line->flags & HBB_PREFIX_IN)
-          dir = '<';
-        else if (line->flags & HBB_PREFIX_OUT)
-          dir = '>';
-        wprintw(win_entry->win, "%.11s #%c# ", date, dir);
-      } else if (line->flags & HBB_PREFIX_IN) {
-        char cryptflag = line->flags & HBB_PREFIX_PGPCRYPT ? '~' : '=';
-        wprintw(win_entry->win, "%.11s <%c= ", date, cryptflag);
-      } else if (line->flags & HBB_PREFIX_OUT) {
-        char cryptflag = line->flags & HBB_PREFIX_PGPCRYPT ? '~' : '-';
-        wprintw(win_entry->win, "%.11s -%c> ", date, cryptflag);
-      } else if (line->flags & HBB_PREFIX_SPECIAL) {
-        strftime(date, 30, "%m-%d %H:%M:%S", localtime(&line->timestamp));
-        wprintw(win_entry->win, "%.14s  ", date);
+      if (!(line->flags & HBB_PREFIX_CONT)) {
+        if (line->flags & HBB_PREFIX_INFO) {
+          char dir = '*';
+          if (line->flags & HBB_PREFIX_IN)
+            dir = '<';
+          else if (line->flags & HBB_PREFIX_OUT)
+            dir = '>';
+          wprintw(win_entry->win, "%.11s *%c* ", date, dir);
+        } else if (line->flags & HBB_PREFIX_ERR) {
+          char dir = '#';
+          if (line->flags & HBB_PREFIX_IN)
+            dir = '<';
+          else if (line->flags & HBB_PREFIX_OUT)
+            dir = '>';
+          wprintw(win_entry->win, "%.11s #%c# ", date, dir);
+        } else if (line->flags & HBB_PREFIX_IN) {
+          char cryptflag = line->flags & HBB_PREFIX_PGPCRYPT ? '~' : '=';
+          wprintw(win_entry->win, "%.11s <%c= ", date, cryptflag);
+        } else if (line->flags & HBB_PREFIX_OUT) {
+          char cryptflag = line->flags & HBB_PREFIX_PGPCRYPT ? '~' : '-';
+          wprintw(win_entry->win, "%.11s -%c> ", date, cryptflag);
+        } else if (line->flags & HBB_PREFIX_SPECIAL) {
+          strftime(date, 30, "%m-%d %H:%M:%S", localtime(&line->timestamp));
+          wprintw(win_entry->win, "%.14s  ", date);
+        } else {
+          wprintw(win_entry->win, "%.11s     ", date);
+        }
       } else {
-        wprintw(win_entry->win, "%.11s     ", date);
+        wprintw(win_entry->win, "                " );
       }
 
       wprintw(win_entry->win, "%s", line->text); // Display text line
 
-      if (line->flags & HBB_PREFIX_HLIGHT_OUT ||
-          line->flags & HBB_PREFIX_HLIGHT)
+      // Return the color back
+      if (line->flags & (HBB_PREFIX_HLIGHT_OUT | HBB_PREFIX_HLIGHT
+                         | HBB_PREFIX_INFO | HBB_PREFIX_IN))
         wattrset(win_entry->win, get_color(COLOR_GENERAL));
       wclrtoeol(win_entry->win);
       g_free(line->text);
--- a/mcabber/src/screen.h	Mon Aug 20 19:08:31 2007 +0200
+++ b/mcabber/src/screen.h	Mon Aug 20 19:41:31 2007 +0200
@@ -46,6 +46,8 @@
   COLOR_ROSTERSEL,
   COLOR_ROSTERSELNMSG,
   COLOR_ROSTERNMSG,
+  COLOR_INFO,
+  COLOR_MSGIN,
   COLOR_max
 };