changeset 1290:e42f48103609

Drawing the MUC nicks by a different color (color is hardcoded to red, needs to be changed to something useable)
author Michal 'vorner' Vaner <vorner@ucw.cz>
date Sun, 26 Aug 2007 18:24:14 +0200
parents 57fe57474122
children 9f64f548ac16
files mcabber/src/commands.c mcabber/src/hbuf.c mcabber/src/hbuf.h mcabber/src/histolog.c mcabber/src/hooks.c mcabber/src/jab_iq.c mcabber/src/jabglue.c mcabber/src/screen.c mcabber/src/screen.h
diffstat 9 files changed, 115 insertions(+), 88 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/commands.c	Mon Aug 27 13:02:16 2007 +0200
+++ b/mcabber/src/commands.c	Sun Aug 26 18:24:14 2007 +0200
@@ -537,7 +537,7 @@
   if (!winId) {
     // 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);
+    scr_WriteIncomingMessage(winId, sbuf->str, 0, msg_flag, 0);
     msg_flag = HBB_PREFIX_INFO | HBB_PREFIX_CONT;
   }
 
@@ -546,7 +546,7 @@
     strftime(tbuf, sizeof(tbuf), "%Y-%m-%d %H:%M:%S",
              localtime(&note->cdate));
     g_string_printf(sbuf, "Note created  %s", tbuf);
-    scr_WriteIncomingMessage(winId, sbuf->str, 0, msg_flag);
+    scr_WriteIncomingMessage(winId, sbuf->str, 0, msg_flag, 0);
     msg_flag = HBB_PREFIX_INFO | HBB_PREFIX_CONT;
   }
   // If we have the modification date, display it
@@ -555,12 +555,12 @@
     strftime(tbuf, sizeof(tbuf), "%Y-%m-%d %H:%M:%S",
              localtime(&note->mdate));
     g_string_printf(sbuf, "Note modified %s", tbuf);
-    scr_WriteIncomingMessage(winId, sbuf->str, 0, msg_flag);
+    scr_WriteIncomingMessage(winId, sbuf->str, 0, msg_flag, 0);
     msg_flag = HBB_PREFIX_INFO | HBB_PREFIX_CONT;
   }
   // Note text
   g_string_printf(sbuf, "Note: %s", note->text);
-  scr_WriteIncomingMessage(winId, sbuf->str, 0, msg_flag);
+  scr_WriteIncomingMessage(winId, sbuf->str, 0, msg_flag, 0);
 
   g_string_free(sbuf, TRUE);
   g_free(note->text);
@@ -624,7 +624,7 @@
       display_and_free_note(note, bjid);
     } else {
       scr_WriteIncomingMessage(bjid, "This item doesn't have a note.", 0,
-                               HBB_PREFIX_INFO);
+                               HBB_PREFIX_INFO, 0);
     }
   }
 }
@@ -1394,17 +1394,17 @@
     scr_ShowBuddyWindow();
 
     snprintf(buffer, 4095, "jid:  <%s>", bjid);
-    scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
+    scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
     if (name) {
       snprintf(buffer, 4095, "Name: %s", name);
-      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
+      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
     }
 
     if (type == ROSTER_TYPE_USER)       bstr = "user";
     else if (type == ROSTER_TYPE_ROOM)  bstr = "chatroom";
     else if (type == ROSTER_TYPE_AGENT) bstr = "agent";
     snprintf(buffer, 127, "Type: %s", bstr);
-    scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
+    scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
 
     if (esub == sub_both)     bstr = "both";
     else if (esub & sub_from) bstr = "from";
@@ -1413,7 +1413,7 @@
     snprintf(buffer, 64, "Subscription: %s", bstr);
     if (esub & sub_pending)
       strcat(buffer, " (pending)");
-    scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
+    scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
 
     resources = buddy_getresources(bud);
     if (!resources && type == ROSTER_TYPE_USER) {
@@ -1421,7 +1421,7 @@
       const char *rst_msg = buddy_getstatusmsg(bud, "");
       if (rst_msg) {
         snprintf(buffer, 4095, "Last status message: %s", rst_msg);
-        scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
+        scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
       }
     }
     for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
@@ -1439,11 +1439,11 @@
 
       snprintf(buffer, 4095, "Resource: [%c] (%d) %s", imstatus2char[rstatus],
                rprio, (char*)p_res->data);
-      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
+      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
       if (rst_msg) {
         snprintf(buffer, 4095, "Status message: %s", rst_msg);
         scr_WriteIncomingMessage(bjid, buffer,
-                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
+                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
       }
       if (rst_time) {
         char tbuf[128];
@@ -1451,20 +1451,20 @@
         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_INFO | HBB_PREFIX_CONT);
+                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
       }
 #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_INFO | HBB_PREFIX_CONT);
+                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
         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_INFO | HBB_PREFIX_CONT);
+                                   0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
         }
       }
 #endif
@@ -1490,7 +1490,7 @@
       g_free(note->jid);
       g_free(note);
       scr_WriteIncomingMessage(bjid, "(This item has an annotation)", 0,
-                               HBB_PREFIX_INFO);
+                               HBB_PREFIX_INFO, 0);
     }
   }
 }
@@ -1522,7 +1522,7 @@
 
   buffer = g_new(char, 4096);
   strncpy(buffer, "Room members:", 127);
-  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
+  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
 
   resources = buddy_getresources(bud);
   for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
@@ -1536,16 +1536,16 @@
       snprintf(buffer, 4095, "[%c] %s%s%s", imstatus2char[rstatus],
                (char*)p_res->data,
                rst_msg ? " -- " : "", rst_msg ? rst_msg : "");
-      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
+      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
     } else {
       // (Style "normal" or "quiet")
       snprintf(buffer, 4095, "[%c] %s", imstatus2char[rstatus],
                (char*)p_res->data);
-      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
+      scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
       if (rst_msg && style == style_normal) {
         snprintf(buffer, 4095, "Status message: %s", rst_msg);
         scr_WriteIncomingMessage(bjid, buffer,
-                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
+                                 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
       }
     }
     g_free(p_res->data);
@@ -2306,10 +2306,10 @@
   buffer = g_new(char, 4096);
 
   snprintf(buffer, 4095, "Whois [%s]", nick);
-  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO);
+  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO, 0);
   snprintf(buffer, 4095, "Status   : [%c] %s", imstatus2char[rstatus],
            rst_msg);
-  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
+  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
 
   if (rst_time) {
     char tbuf[128];
@@ -2317,23 +2317,23 @@
     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_INFO | HBB_PREFIX_CONT);
+                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
   }
 
   if (realjid) {
     snprintf(buffer, 4095, "JID      : <%s>", realjid);
     scr_WriteIncomingMessage(bjid, buffer,
-                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
+                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
   }
 
   snprintf(buffer, 4095, "Role     : %s", strrole[role]);
-  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
+  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
   snprintf(buffer, 4095, "Affiliat.: %s", straffil[affil]);
-  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
+  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
   snprintf(buffer, 4095, "Priority : %d", rprio);
-  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
-
-  scr_WriteIncomingMessage(bjid, "End of WHOIS", 0, HBB_PREFIX_INFO);
+  scr_WriteIncomingMessage(bjid, buffer, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
+
+  scr_WriteIncomingMessage(bjid, "End of WHOIS", 0, HBB_PREFIX_INFO, 0);
 
   g_free(buffer);
   g_free(nick);
@@ -2388,12 +2388,12 @@
 
   sbuf = g_string_new("");
 
-  scr_WriteIncomingMessage(NULL, "List of MUC bookmarks:", 0, HBB_PREFIX_INFO);
+  scr_WriteIncomingMessage(NULL, "List of MUC bookmarks:", 0, HBB_PREFIX_INFO, 0);
 
   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_INFO | HBB_PREFIX_CONT);
+                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
   }
 
   scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE);
@@ -2820,16 +2820,16 @@
           if (settings_pgp_getkeyid(fjid)) {
             g_string_printf(sbuf, "PGP Encryption key id: %s",
                             settings_pgp_getkeyid(fjid));
-            scr_WriteIncomingMessage(fjid, sbuf->str, 0, HBB_PREFIX_INFO);
+            scr_WriteIncomingMessage(fjid, sbuf->str, 0, HBB_PREFIX_INFO, 0);
           }
           disabled = settings_pgp_getdisabled(fjid);
           g_string_printf(sbuf, "PGP encryption is %s",
                           (disabled ?  "disabled" : "enabled"));
-          scr_WriteIncomingMessage(fjid, sbuf->str, 0, HBB_PREFIX_INFO);
+          scr_WriteIncomingMessage(fjid, sbuf->str, 0, HBB_PREFIX_INFO, 0);
           if (!disabled && settings_pgp_getforce(fjid)) {
             scr_WriteIncomingMessage(fjid,
                                      "Encryption enforced (no negotiation)",
-                                     0, HBB_PREFIX_INFO);
+                                     0, HBB_PREFIX_INFO, 0);
           }
           g_string_free(sbuf, TRUE);
           break;
--- a/mcabber/src/hbuf.c	Mon Aug 27 13:02:16 2007 +0200
+++ b/mcabber/src/hbuf.c	Sun Aug 26 18:24:14 2007 +0200
@@ -38,6 +38,7 @@
   // (for ex. when HBB_FLAG_PERSISTENT is set).
   struct { // hbuf_line_info
     time_t timestamp;
+    unsigned mucnicklen;
     guint  flags;
   } prefix;
 } hbuf_block;
@@ -117,7 +118,8 @@
 //         should be expanded before.
 // Note 2: width does not include the ending \0.
 void hbuf_add_line(GList **p_hbuf, const char *text, time_t timestamp,
-        guint prefix_flags, guint width, guint maxhbufblocks)
+        guint prefix_flags, guint width, guint maxhbufblocks,
+        unsigned mucnicklen)
 {
   GList *curr_elt;
   char *line;
@@ -128,6 +130,7 @@
   hbuf_block_elt = g_new0(hbuf_block, 1);
   hbuf_block_elt->prefix.timestamp  = timestamp;
   hbuf_block_elt->prefix.flags      = prefix_flags;
+  hbuf_block_elt->prefix.mucnicklen = mucnicklen;
   if (!*p_hbuf) {
     hbuf_block_elt->ptr  = g_new(char, HBB_BLOCKSIZE);
     hbuf_block_elt->flags  = HBB_FLAG_ALLOC | HBB_FLAG_PERSISTENT;
@@ -319,9 +322,10 @@
       blk = (hbuf_block*)(hbuf->data);
       maxlen = blk->ptr_end - blk->ptr;
       *array_elt = (hbb_line*)g_new(hbb_line, 1);
-      (*array_elt)->timestamp = blk->prefix.timestamp;
-      (*array_elt)->flags     = blk->prefix.flags;
-      (*array_elt)->text      = g_strndup(blk->ptr, maxlen);
+      (*array_elt)->timestamp  = blk->prefix.timestamp;
+      (*array_elt)->flags      = blk->prefix.flags;
+      (*array_elt)->mucnicklen = blk->prefix.mucnicklen;
+      (*array_elt)->text       = g_strndup(blk->ptr, maxlen);
 
       if ((blk->flags & HBB_FLAG_PERSISTENT) && blk->prefix.flags) {
         last_persist_prefixflags = blk->prefix.flags;
@@ -332,6 +336,7 @@
                                 HBB_PREFIX_INFO | HBB_PREFIX_IN);
         //Continuation of a message - omit the prefix
         (*array_elt)->flags |= HBB_PREFIX_CONT;
+        (*array_elt)->mucnicklen = 0;//The nick is in the first one
       }
 
       hbuf = g_list_next(hbuf);
--- a/mcabber/src/hbuf.h	Mon Aug 27 13:02:16 2007 +0200
+++ b/mcabber/src/hbuf.h	Sun Aug 26 18:24:14 2007 +0200
@@ -31,11 +31,13 @@
 typedef struct {
   time_t timestamp;
   guint flags;
+  unsigned mucnicklen;
   char *text;
 } hbb_line;
 
 void hbuf_add_line(GList **p_hbuf, const char *text, time_t timestamp,
-        guint prefix_flags, guint width, guint maxhbufblocks);
+        guint prefix_flags, guint width, guint maxhbufblocks,
+        unsigned mucnicklen);
 void hbuf_free(GList **p_hbuf);
 void hbuf_rebuild(GList **p_hbuf, unsigned int width);
 GList *hbuf_previous_persistent(GList *l_line);
--- a/mcabber/src/histolog.c	Mon Aug 27 13:02:16 2007 +0200
+++ b/mcabber/src/histolog.c	Sun Aug 26 18:24:14 2007 +0200
@@ -289,7 +289,7 @@
       if (converted) {
         xtext = ut_expand_tabs(converted); // Expand tabs
         hbuf_add_line(p_buddyhbuf, xtext, timestamp, prefix_flags, width,
-                      max_num_of_blocks);
+                      max_num_of_blocks, 0);
         if (xtext != converted)
           g_free(xtext);
         g_free(converted);
--- a/mcabber/src/hooks.c	Mon Aug 27 13:02:16 2007 +0200
+++ b/mcabber/src/hooks.c	Sun Aug 26 18:24:14 2007 +0200
@@ -49,6 +49,7 @@
   guint rtype = ROSTER_TYPE_USER;
   char *wmsg = NULL, *bmsg = NULL, *mmsg = NULL;
   GSList *roster_usr;
+  unsigned mucnicklen = 0;
 
   if (encrypted)
     message_flags |= HBB_PREFIX_PGPCRYPT;
@@ -63,6 +64,7 @@
       wmsg = bmsg = g_strdup_printf("~ %s", msg);
     } else {
       wmsg = bmsg = g_strdup_printf("<%s> %s", resname, msg);
+      mucnicklen = strlen(resname) + 2;
       if (!strncmp(msg, COMMAND_ME, strlen(COMMAND_ME)))
         wmsg = mmsg = g_strdup_printf("*%s %s", resname, msg+4);
     }
@@ -157,7 +159,7 @@
   // Note: the hlog_write should not be called first, because in some
   // cases scr_WriteIncomingMessage() will load the history and we'd
   // have the message twice...
-  scr_WriteIncomingMessage(bjid, wmsg, timestamp, message_flags);
+  scr_WriteIncomingMessage(bjid, wmsg, timestamp, message_flags, mucnicklen);
 
   // We don't log the modified message, but the original one
   if (wmsg == mmsg)
@@ -306,7 +308,7 @@
                            imstatus2char[oldstat], imstatus2char[status],
                            ((status_msg) ? status_msg : ""));
       scr_WriteIncomingMessage(bjid, bn, timestamp,
-                               HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG);
+                               HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG, 0);
       g_free(bn);
     }
   }
--- a/mcabber/src/jab_iq.c	Mon Aug 27 13:02:16 2007 +0200
+++ b/mcabber/src/jab_iq.c	Sun Aug 26 18:24:14 2007 +0200
@@ -347,26 +347,26 @@
   p = strchr(bjid, JID_RESOURCE_SEPARATOR);
   if (p) *p = '\0';
 
-  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO);
+  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0);
   g_free(buf);
 
   // Get result data...
   p = xmlnode_get_tag_data(ansqry, "name");
   if (p) {
     buf = g_strdup_printf("Name:    %s", p);
-    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
     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_INFO | HBB_PREFIX_CONT);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
     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_INFO | HBB_PREFIX_CONT);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
     g_free(buf);
   }
   return 0;
@@ -412,26 +412,26 @@
   p = strchr(bjid, JID_RESOURCE_SEPARATOR);
   if (p) *p = '\0';
 
-  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO);
+  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0);
   g_free(buf);
 
   // Get result data...
   p = xmlnode_get_tag_data(ansqry, "utc");
   if (p) {
     buf = g_strdup_printf("UTC:  %s", p);
-    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
     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_INFO | HBB_PREFIX_CONT);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
     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_INFO | HBB_PREFIX_CONT);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
     g_free(buf);
   }
   return 0;
@@ -477,7 +477,7 @@
   p = strchr(bjid, JID_RESOURCE_SEPARATOR);
   if (p) *p = '\0';
 
-  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO);
+  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0);
   g_free(buf);
 
   // Get result data...
@@ -497,16 +497,16 @@
     s %= 3600L;
     g_string_append_printf(sbuf, "%02ld:%02ld", s/60L, s%60L);
     scr_WriteIncomingMessage(bjid, sbuf->str,
-                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
+                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
     g_string_free(sbuf, TRUE);
   } else {
     scr_WriteIncomingMessage(bjid, "No idle time reported.",
-                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
+                             0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
   }
   p = xmlnode_get_data(ansqry);
   if (p) {
     buf = g_strdup_printf("Status message: %s", p);
-    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO);
+    scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0);
     g_free(buf);
   }
   return 0;
@@ -541,7 +541,7 @@
                         (vcard_attrib & vcard_pref ? "[pref]" : ""),
                         (vcard_attrib ? " " : ""),
                         text);
-  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT);
+  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
   g_free(buf);
 }
 
@@ -665,7 +665,7 @@
   p = strchr(bjid, JID_RESOURCE_SEPARATOR);
   if (p) *p = '\0';
 
-  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO);
+  scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0);
   g_free(buf);
 
   // Get result data...
--- a/mcabber/src/jabglue.c	Mon Aug 27 13:02:16 2007 +0200
+++ b/mcabber/src/jabglue.c	Sun Aug 26 18:24:14 2007 +0200
@@ -1645,7 +1645,7 @@
     res_pgpdata->last_sigsum = sigsum;
     if (sigsum & GPGME_SIGSUM_RED) {
       buf = g_strdup_printf("Bad signature from <%s/%s>", barejid, rname);
-      scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_INFO);
+      scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_INFO, 0);
       scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
       g_free(buf);
     }
@@ -1654,7 +1654,7 @@
     if (keys_mismatch(key, expectedkey)) {
       buf = g_strdup_printf("Warning: The KeyId from <%s/%s> doesn't match "
                             "the key you set up", barejid, rname);
-      scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_INFO);
+      scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_INFO, 0);
       scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
       g_free(buf);
     }
@@ -1698,7 +1698,7 @@
 
     mbuf = g_strdup_printf("Unexpected groupchat packet!");
     scr_LogPrint(LPRINT_LOGNORM, "%s", mbuf);
-    scr_WriteIncomingMessage(bjid, mbuf, 0, HBB_PREFIX_INFO);
+    scr_WriteIncomingMessage(bjid, mbuf, 0, HBB_PREFIX_INFO, 0);
     g_free(mbuf);
 
     // Send back an unavailable packet
@@ -1988,7 +1988,7 @@
     mbuf = g_strdup_printf("Unexpected groupchat packet!");
 
     scr_LogPrint(LPRINT_LOGNORM, "%s", mbuf);
-    scr_WriteIncomingMessage(roomjid, mbuf, 0, HBB_PREFIX_INFO);
+    scr_WriteIncomingMessage(roomjid, mbuf, 0, HBB_PREFIX_INFO, 0);
     g_free(mbuf);
     // Send back an unavailable packet
     jb_setstatus(offline, roomjid, "", TRUE);
@@ -2013,7 +2013,7 @@
   if (statuscode == 303 && mbnick) {
     mbuf = g_strdup_printf("%s is now known as %s", rname, mbnick);
     scr_WriteIncomingMessage(roomjid, mbuf, usttime,
-                             HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG);
+                             HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG, 0);
     if (log_muc_conf)
       hlog_write_message(roomjid, 0, FALSE, mbuf);
     g_free(mbuf);
@@ -2098,7 +2098,7 @@
     if (!we_left && settings_opt_get_int("muc_flag_joins") != 2)
       msgflags |= HBB_PREFIX_NOFLAG;
 
-    scr_WriteIncomingMessage(roomjid, mbuf, usttime, msgflags);
+    scr_WriteIncomingMessage(roomjid, mbuf, usttime, msgflags, 0);
 
     if (log_muc_conf)
       hlog_write_message(roomjid, 0, FALSE, mbuf);
@@ -2131,7 +2131,7 @@
         // Note: the usttime timestamp is related to the other member,
         //       so we use 0 here.
         scr_WriteIncomingMessage(roomjid, mbuf, 0,
-                                 HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG);
+                                 HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG, 0);
         if (log_muc_conf)
           hlog_write_message(roomjid, 0, FALSE, mbuf);
         g_free(mbuf);
@@ -2150,7 +2150,7 @@
       msgflags = HBB_PREFIX_INFO;
       if (!settings_opt_get_int("muc_flag_joins"))
         msgflags |= HBB_PREFIX_NOFLAG;
-      scr_WriteIncomingMessage(roomjid, mbuf, usttime, msgflags);
+      scr_WriteIncomingMessage(roomjid, mbuf, usttime, msgflags, 0);
       if (log_muc_conf)
         hlog_write_message(roomjid, 0, FALSE, mbuf);
       g_free(mbuf);
@@ -2276,7 +2276,7 @@
   }
 
   barejid = jidtodisp(from);
-  scr_WriteIncomingMessage(barejid, sbuf->str, 0, HBB_PREFIX_INFO);
+  scr_WriteIncomingMessage(barejid, sbuf->str, 0, HBB_PREFIX_INFO, 0);
   scr_LogPrint(LPRINT_LOGNORM, "%s", sbuf->str);
 
   evn = evs_new(EVS_TYPE_INVITATION, EVS_MAX_TIMEOUT);
@@ -2293,7 +2293,7 @@
   } else {
     g_string_printf(sbuf, "Unable to create a new event!");
   }
-  scr_WriteIncomingMessage(barejid, sbuf->str, 0, HBB_PREFIX_INFO);
+  scr_WriteIncomingMessage(barejid, sbuf->str, 0, HBB_PREFIX_INFO, 0);
   scr_LogPrint(LPRINT_LOGNORM, "%s", sbuf->str);
   g_string_free(sbuf, TRUE);
 
@@ -2368,7 +2368,7 @@
         mbuf = g_strdup_printf("%s has set the topic to: %s", r, subj);
       }
       scr_WriteIncomingMessage(s, mbuf, 0,
-                               HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG);
+                               HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG, 0);
       if (settings_opt_get_int("log_muc_conf"))
         hlog_write_message(s, 0, FALSE, mbuf);
       g_free(s);
@@ -2575,7 +2575,7 @@
         jb_delbuddy(barejid);
     }
   }
-  scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_INFO);
+  scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_INFO, 0);
   scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
   g_free(buf);
   return 0;
@@ -2672,13 +2672,13 @@
 
     buf = g_strdup_printf("<%s> wants to subscribe to your presence updates",
                           from);
-    scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO);
+    scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
     scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
     g_free(buf);
 
     if (msg) {
       buf = g_strdup_printf("<%s> said: %s", from, msg);
-      scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO);
+      scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
       replace_nl_with_dots(buf);
       scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
       g_free(buf);
@@ -2695,7 +2695,7 @@
     } else {
       buf = g_strdup_printf("Unable to create a new event!");
     }
-    scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO);
+    scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
     scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
     g_free(buf);
   } else if (!strcmp(type, "unsubscribe")) {
@@ -2703,14 +2703,14 @@
     jb_subscr_cancel_auth(from);
     buf = g_strdup_printf("<%s> is unsubscribing from your "
                           "presence updates", from);
-    scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO);
+    scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
     scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
     g_free(buf);
   } else if (!strcmp(type, "subscribed")) {
     /* The sender has allowed us to receive their presence */
     buf = g_strdup_printf("<%s> has allowed you to receive their "
                           "presence updates", from);
-    scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO);
+    scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
     scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
     g_free(buf);
   } else if (!strcmp(type, "unsubscribed")) {
@@ -2720,7 +2720,7 @@
     update_roster = TRUE;
     buf = g_strdup_printf("<%s> has cancelled your subscription to "
                           "their presence updates", from);
-    scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO);
+    scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
     scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
     g_free(buf);
   } else {
--- a/mcabber/src/screen.c	Mon Aug 27 13:02:16 2007 +0200
+++ b/mcabber/src/screen.c	Sun Aug 26 18:24:14 2007 +0200
@@ -135,7 +135,8 @@
 static void add_keyseq(char *seqstr, guint mkeycode, gint value);
 
 void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp,
-                       unsigned int prefix_flags, int force_show);
+                       unsigned int prefix_flags, int force_show,
+                       unsigned mucnicklen);
 
 #ifdef HAVE_ASPELL_H
 #define ASPELLBADCHAR 5
@@ -712,12 +713,12 @@
       wprintw(logWnd, "\n%s", buffer_locale);
       update_panels();
       scr_WriteInWindow(NULL, buf_specialwindow, timestamp,
-                        HBB_PREFIX_SPECIAL, FALSE);
+                        HBB_PREFIX_SPECIAL, FALSE, 0);
     } else {
       printf("%s\n", buffer_locale);
       // ncurses are not initialized yet, so we call directly hbuf routine
       hbuf_add_line(&statushbuf, buf_specialwindow, timestamp,
-        HBB_PREFIX_SPECIAL, 0, 0);
+        HBB_PREFIX_SPECIAL, 0, 0, 0);
     }
 
     g_free(convbuf1);
@@ -899,12 +900,26 @@
       // Make sure we are at the right position
       wmove(win_entry->win, n, getprefixwidth()-1);
       wprintw(win_entry->win, "%s", line->text); // Display text line
+      wclrtoeol(win_entry->win);
+
+      //The MUC nick - overwrite with propper color
+      if (line->mucnicklen) {
+        //Store the char after the nick
+        char tmp = line->text[line->mucnicklen];
+        //TODO choose the color in proper way
+        wattrset(win_entry->win, get_color(COLOR_RED_BOLD_FG));
+        wmove(win_entry->win, n, getprefixwidth()-1);
+        //Terminate the string after the nick
+        line->text[line->mucnicklen] = '\0';
+        wprintw(win_entry->win, "%s", line->text);
+        //Return the char
+        line->text[line->mucnicklen] = tmp;
+      }
 
       // Return the color back
-      if (line->flags & (HBB_PREFIX_HLIGHT_OUT | HBB_PREFIX_HLIGHT
-                         | HBB_PREFIX_INFO | HBB_PREFIX_IN))
+      if ((line->flags & (HBB_PREFIX_HLIGHT_OUT | HBB_PREFIX_HLIGHT
+          | HBB_PREFIX_INFO | HBB_PREFIX_IN)) || (line->mucnicklen))
         wattrset(win_entry->win, get_color(COLOR_GENERAL));
-      wclrtoeol(win_entry->win);
       g_free(line->text);
       g_free(line);
     } else {
@@ -1006,7 +1021,8 @@
 // Lines are splitted when they are too long to fit in the chat window.
 // If this window doesn't exist, it is created.
 void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp,
-                       unsigned int prefix_flags, int force_show)
+                       unsigned int prefix_flags, int force_show,
+                       unsigned mucnicklen)
 {
   winbuf *win_entry;
   char *text_locale;
@@ -1043,7 +1059,7 @@
 
   text_locale = from_utf8(text);
   hbuf_add_line(&win_entry->bd->hbuf, text_locale, timestamp, prefix_flags,
-                maxX - Roster_Width - getprefixwidth(), num_history_blocks);
+                maxX - Roster_Width - getprefixwidth(), num_history_blocks, mucnicklen);
   g_free(text_locale);
 
   if (win_entry->bd->cleared) {
@@ -1694,7 +1710,8 @@
 }
 
 inline void scr_WriteMessage(const char *bjid, const char *text,
-                             time_t timestamp, guint prefix_flags)
+                             time_t timestamp, guint prefix_flags,
+                             unsigned mucnicklen)
 {
   char *xtext;
 
@@ -1702,7 +1719,7 @@
 
   xtext = ut_expand_tabs(text); // Expand tabs and filter out some chars
 
-  scr_WriteInWindow(bjid, xtext, timestamp, prefix_flags, FALSE);
+  scr_WriteInWindow(bjid, xtext, timestamp, prefix_flags, FALSE, mucnicklen);
 
   if (xtext != (char*)text)
     g_free(xtext);
@@ -1710,14 +1727,14 @@
 
 // If prefix is NULL, HBB_PREFIX_IN is supposed.
 void scr_WriteIncomingMessage(const char *jidfrom, const char *text,
-        time_t timestamp, guint prefix)
+        time_t timestamp, guint prefix, unsigned mucnicklen)
 {
   if (!(prefix &
         ~HBB_PREFIX_NOFLAG & ~HBB_PREFIX_HLIGHT & ~HBB_PREFIX_HLIGHT_OUT &
         ~HBB_PREFIX_PGPCRYPT))
     prefix |= HBB_PREFIX_IN;
 
-  scr_WriteMessage(jidfrom, text, timestamp, prefix);
+  scr_WriteMessage(jidfrom, text, timestamp, prefix, mucnicklen);
 }
 
 void scr_WriteOutgoingMessage(const char *jidto, const char *text, guint prefix)
@@ -1726,7 +1743,7 @@
   roster_elt = roster_find(jidto, jidsearch,
                            ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM);
 
-  scr_WriteMessage(jidto, text, 0, prefix|HBB_PREFIX_OUT|HBB_PREFIX_HLIGHT_OUT);
+  scr_WriteMessage(jidto, text, 0, prefix|HBB_PREFIX_OUT|HBB_PREFIX_HLIGHT_OUT, 0);
 
   // Show jidto's buffer unless the buddy is not in the buddylist
   if (roster_elt && g_list_position(buddylist, roster_elt->data) != -1)
--- a/mcabber/src/screen.h	Mon Aug 27 13:02:16 2007 +0200
+++ b/mcabber/src/screen.h	Sun Aug 26 18:24:14 2007 +0200
@@ -106,7 +106,8 @@
 void scr_UpdateChatStatus(int forceupdate);
 void scr_RosterVisibility(int status);
 void scr_WriteIncomingMessage(const char *jidfrom, const char *text,
-                              time_t timestamp, guint prefix);
+                              time_t timestamp, guint prefix,
+                              unsigned mucnicklen);
 void scr_WriteOutgoingMessage(const char *jidto,   const char *text,
                               guint prefix);
 void scr_ShowBuddyWindow(void);