summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWouter Coekaerts <coekie@irssi.org>2004-10-06 16:25:34 +0000
committercoekie <coekie@dbcabf3a-b0e7-0310-adc4-f8d773084564>2004-10-06 16:25:34 +0000
commitfa80d4913b4a103a6bfc184245d880eda9ef20d4 (patch)
treeb74dde7e31778f31fb2daa00461347ec6e9c5b7f
parentc5982338c131d096914e48aceb6b786c31a7686f (diff)
downloadirssi-fa80d4913b4a103a6bfc184245d880eda9ef20d4.zip
Fix HILIGHT -actcolor -mask (Bug 131)
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@3309 dbcabf3a-b0e7-0310-adc4-f8d773084564
-rw-r--r--src/fe-common/core/fe-messages.c43
-rw-r--r--src/fe-common/core/hilight-text.c14
-rw-r--r--src/fe-common/core/hilight-text.h7
3 files changed, 33 insertions, 31 deletions
diff --git a/src/fe-common/core/fe-messages.c b/src/fe-common/core/fe-messages.c
index d5b011c5..e33e973c 100644
--- a/src/fe-common/core/fe-messages.c
+++ b/src/fe-common/core/fe-messages.c
@@ -153,6 +153,7 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
const char *nickmode, *printnick;
int for_me, print_channel, level;
char *color, *freemsg = NULL;
+ HILIGHT_REC *hilight;
/* NOTE: this may return NULL if some channel is just closed with
/WINDOW CLOSE and server still sends the few last messages */
@@ -162,8 +163,9 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
for_me = !settings_get_bool("hilight_nick_matches") ? FALSE :
nick_match_msg(chanrec, msg, server->nick);
- color = for_me ? NULL :
+ hilight = for_me ? NULL :
hilight_match_nick(server, target, nick, address, MSGLEVEL_PUBLIC, msg);
+ color = (hilight == NULL) ? NULL : hilight_get_color(hilight);
print_channel = chanrec == NULL ||
!window_item_is_active((WI_ITEM_REC *) chanrec);
@@ -172,7 +174,7 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
print_channel = TRUE;
level = MSGLEVEL_PUBLIC;
- if (for_me || color != NULL)
+ if (for_me)
level |= MSGLEVEL_HILIGHT;
if (settings_get_bool("emphasis"))
@@ -186,34 +188,31 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
if (printnick == NULL)
printnick = nick;
- if (!print_channel) {
- /* message to active channel in window */
- if (color != NULL) {
- /* highlighted nick */
- printformat(server, target, level,
- TXT_PUBMSG_HILIGHT,
- color, printnick, msg, nickmode);
- } else {
+ if (color != NULL) {
+ /* highlighted nick */
+ TEXT_DEST_REC dest;
+ format_create_dest(&dest, server, target, level, NULL);
+ hilight_update_text_dest(&dest,hilight);
+ if (!print_channel) /* message to active channel in window */
+ printformat_dest(&dest, TXT_PUBMSG_HILIGHT, color,
+ printnick, msg, nickmode);
+ else /* message to not existing/active channel */
+ printformat_dest(&dest, TXT_PUBMSG_HILIGHT_CHANNEL,
+ color, printnick, target, msg,
+ nickmode);
+ } else {
+ if (!print_channel)
printformat(server, target, level,
for_me ? TXT_PUBMSG_ME : TXT_PUBMSG,
printnick, msg, nickmode);
- }
- } else {
- /* message to not existing/active channel */
- if (color != NULL) {
- /* highlighted nick */
- printformat(server, target, level,
- TXT_PUBMSG_HILIGHT_CHANNEL,
- color, printnick, target, msg, nickmode);
- } else {
+ else
printformat(server, target, level,
for_me ? TXT_PUBMSG_ME_CHANNEL :
TXT_PUBMSG_CHANNEL,
printnick, target, msg, nickmode);
- }
- }
+ }
- g_free_not_null(freemsg);
+ g_free_not_null(freemsg);
g_free_not_null(color);
}
diff --git a/src/fe-common/core/hilight-text.c b/src/fe-common/core/hilight-text.c
index 796a482b..b379b814 100644
--- a/src/fe-common/core/hilight-text.c
+++ b/src/fe-common/core/hilight-text.c
@@ -279,7 +279,7 @@ static char *hilight_get_act_color(HILIGHT_REC *rec)
settings_get_str("hilight_act_color"));
}
-static char *hilight_get_color(HILIGHT_REC *rec)
+char *hilight_get_color(HILIGHT_REC *rec)
{
const char *color;
@@ -291,7 +291,7 @@ static char *hilight_get_color(HILIGHT_REC *rec)
return format_string_expand(color, NULL);
}
-static void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec)
+void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec)
{
dest->level |= MSGLEVEL_HILIGHT;
@@ -305,6 +305,8 @@ static void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec)
dest->hilight_color = hilight_get_act_color(rec);
}
+static void hilight_print(int index, HILIGHT_REC *rec);
+
static void sig_print_text(TEXT_DEST_REC *dest, const char *text,
const char *stripped)
{
@@ -398,19 +400,15 @@ static void sig_print_text(TEXT_DEST_REC *dest, const char *text,
signal_stop();
}
-char *hilight_match_nick(SERVER_REC *server, const char *channel,
+HILIGHT_REC *hilight_match_nick(SERVER_REC *server, const char *channel,
const char *nick, const char *address,
int level, const char *msg)
{
HILIGHT_REC *rec;
- char *color;
rec = hilight_match(server, channel, nick, address,
level, msg, NULL, NULL);
- color = rec == NULL || !rec->nick ? NULL :
- hilight_get_color(rec);
-
- return color;
+ return (rec == NULL || !rec->nick) ? NULL : rec;
}
static void read_hilight_config(void)
diff --git a/src/fe-common/core/hilight-text.h b/src/fe-common/core/hilight-text.h
index 6e510737..74c58780 100644
--- a/src/fe-common/core/hilight-text.h
+++ b/src/fe-common/core/hilight-text.h
@@ -5,6 +5,8 @@
# include <regex.h>
#endif
+#include "formats.h"
+
typedef struct _HILIGHT_REC HILIGHT_REC;
struct _HILIGHT_REC {
@@ -36,9 +38,12 @@ HILIGHT_REC *hilight_match(SERVER_REC *server, const char *channel,
int level, const char *str,
int *match_beg, int *match_end);
-char *hilight_match_nick(SERVER_REC *server, const char *channel,
+HILIGHT_REC *hilight_match_nick(SERVER_REC *server, const char *channel,
const char *nick, const char *address,
int level, const char *msg);
+
+char *hilight_get_color(HILIGHT_REC *rec);
+void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec);
void hilight_create(HILIGHT_REC *rec);
void hilight_remove(HILIGHT_REC *rec);