# HG changeset patch # User Mikael Berthe # Date 1187631691 -7200 # Node ID dbc907b2d92f8776de6f80955b53dece979ca44c # Parent c5257cbe6ae45ee51f26adb44e7995ff1227d639 Add configurable colors for info and incoming messages (Michal 'vorner' Vaner) diff -r c5257cbe6ae4 -r dbc907b2d92f mcabber/mcabberrc.example --- 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 diff -r c5257cbe6ae4 -r dbc907b2d92f mcabber/src/commands.c --- 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(¬e->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(¬e->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); diff -r c5257cbe6ae4 -r dbc907b2d92f mcabber/src/hbuf.c --- 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); diff -r c5257cbe6ae4 -r dbc907b2d92f mcabber/src/hbuf.h --- 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; diff -r c5257cbe6ae4 -r dbc907b2d92f mcabber/src/jab_iq.c --- 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); } diff -r c5257cbe6ae4 -r dbc907b2d92f mcabber/src/screen.c --- 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); diff -r c5257cbe6ae4 -r dbc907b2d92f mcabber/src/screen.h --- 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 };