diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/weeconfig.c | 10 | ||||
-rw-r--r-- | src/common/weeconfig.h | 2 | ||||
-rw-r--r-- | src/gui/curses/gui-display.c | 56 | ||||
-rw-r--r-- | src/gui/gui.h | 34 | ||||
-rw-r--r-- | src/irc/irc-display.c | 36 | ||||
-rw-r--r-- | src/irc/irc-nick.c | 15 | ||||
-rw-r--r-- | src/irc/irc-recv.c | 19 | ||||
-rw-r--r-- | src/irc/irc.h | 4 |
8 files changed, 113 insertions, 63 deletions
diff --git a/src/common/weeconfig.c b/src/common/weeconfig.c index 04e678f40..a9d14c674 100644 --- a/src/common/weeconfig.c +++ b/src/common/weeconfig.c @@ -204,6 +204,8 @@ int cfg_col_input_nick; int cfg_col_input_bg; int cfg_col_nick; int cfg_col_nick_away; +int cfg_col_nick_chanowner; +int cfg_col_nick_chanadmin; int cfg_col_nick_op; int cfg_col_nick_halfop; int cfg_col_nick_voice; @@ -347,6 +349,14 @@ t_config_option weechat_options_colors[] = N_("color for away nicknames"), OPTION_TYPE_COLOR, 0, 0, 0, "cyan", NULL, &cfg_col_nick_away, NULL, &config_change_color }, + { "col_nick_chanowner", N_("color for chan owner symbol"), + N_("color for chan owner symbol (specific to unrealircd)"), + OPTION_TYPE_COLOR, 0, 0, 0, + "lightgreen", NULL, &cfg_col_nick_chanowner, NULL, &config_change_color }, + { "col_nick_chanadmin", N_("color for chan admin symbol"), + N_("color for chan admin symbol (specific to unrealircd)"), + OPTION_TYPE_COLOR, 0, 0, 0, + "lightgreen", NULL, &cfg_col_nick_chanadmin, NULL, &config_change_color }, { "col_nick_op", N_("color for operator symbol"), N_("color for operator symbol"), OPTION_TYPE_COLOR, 0, 0, 0, diff --git a/src/common/weeconfig.h b/src/common/weeconfig.h index 920228a48..f69d010af 100644 --- a/src/common/weeconfig.h +++ b/src/common/weeconfig.h @@ -127,6 +127,8 @@ extern int cfg_col_input_nick; extern int cfg_col_input_bg; extern int cfg_col_nick; extern int cfg_col_nick_away; +extern int cfg_col_nick_chanowner; +extern int cfg_col_nick_chanadmin; extern int cfg_col_nick_op; extern int cfg_col_nick_halfop; extern int cfg_col_nick_voice; diff --git a/src/gui/curses/gui-display.c b/src/gui/curses/gui-display.c index d19338cd7..ec488e310 100644 --- a/src/gui/curses/gui-display.c +++ b/src/gui/curses/gui-display.c @@ -851,35 +851,41 @@ gui_draw_buffer_nick (t_gui_buffer *buffer, int erase) x = column; break; } - if (ptr_nick->is_op) + if (ptr_nick->is_chanowner) + { + gui_window_set_color (ptr_win->win_nick, COLOR_WIN_NICK_CHANOWNER); + mvwprintw (ptr_win->win_nick, y, x, "~"); + x++; + } + else if (ptr_nick->is_chanadmin) + { + gui_window_set_color (ptr_win->win_nick, COLOR_WIN_NICK_CHANADMIN); + mvwprintw (ptr_win->win_nick, y, x, "&"); + x++; + } + else if (ptr_nick->is_op) { gui_window_set_color (ptr_win->win_nick, COLOR_WIN_NICK_OP); mvwprintw (ptr_win->win_nick, y, x, "@"); x++; } + else if (ptr_nick->is_halfop) + { + gui_window_set_color (ptr_win->win_nick, COLOR_WIN_NICK_HALFOP); + mvwprintw (ptr_win->win_nick, y, x, "%%"); + x++; + } + else if (ptr_nick->has_voice) + { + gui_window_set_color (ptr_win->win_nick, COLOR_WIN_NICK_VOICE); + mvwprintw (ptr_win->win_nick, y, x, "+"); + x++; + } else { - if (ptr_nick->is_halfop) - { - gui_window_set_color (ptr_win->win_nick, COLOR_WIN_NICK_HALFOP); - mvwprintw (ptr_win->win_nick, y, x, "%%"); - x++; - } - else - { - if (ptr_nick->has_voice) - { - gui_window_set_color (ptr_win->win_nick, COLOR_WIN_NICK_VOICE); - mvwprintw (ptr_win->win_nick, y, x, "+"); - x++; - } - else - { - gui_window_set_color (ptr_win->win_nick, COLOR_WIN_NICK); - mvwprintw (ptr_win->win_nick, y, x, " "); - x++; - } - } + gui_window_set_color (ptr_win->win_nick, COLOR_WIN_NICK); + mvwprintw (ptr_win->win_nick, y, x, " "); + x++; } gui_window_set_color (ptr_win->win_nick, (ptr_nick->is_away) ? @@ -2011,6 +2017,10 @@ gui_init_colors () cfg_col_nick & A_CHARTEXT, cfg_col_nick_bg); init_pair (COLOR_WIN_NICK_AWAY, cfg_col_nick_away & A_CHARTEXT, cfg_col_nick_bg); + init_pair (COLOR_WIN_NICK_CHANOWNER, + cfg_col_nick_chanowner & A_CHARTEXT, cfg_col_nick_bg); + init_pair (COLOR_WIN_NICK_CHANADMIN, + cfg_col_nick_chanadmin & A_CHARTEXT, cfg_col_nick_bg); init_pair (COLOR_WIN_NICK_OP, cfg_col_nick_op & A_CHARTEXT, cfg_col_nick_bg); init_pair (COLOR_WIN_NICK_HALFOP, @@ -2071,6 +2081,8 @@ gui_init_colors () color_attr[COLOR_WIN_INPUT_NICK - 1] = (cfg_col_input_nick >= 0) ? cfg_col_input_nick & A_BOLD : 0; color_attr[COLOR_WIN_NICK - 1] = (cfg_col_nick >= 0) ? cfg_col_nick & A_BOLD : 0; color_attr[COLOR_WIN_NICK_AWAY - 1] = (cfg_col_nick_away >= 0) ? cfg_col_nick_away & A_BOLD : 0; + color_attr[COLOR_WIN_NICK_CHANOWNER - 1] = (cfg_col_nick_chanowner >= 0) ? cfg_col_nick_chanowner & A_BOLD : 0; + color_attr[COLOR_WIN_NICK_CHANADMIN - 1] = (cfg_col_nick_chanadmin >= 0) ? cfg_col_nick_chanadmin & A_BOLD : 0; color_attr[COLOR_WIN_NICK_OP - 1] = (cfg_col_nick_op >= 0) ? cfg_col_nick_op & A_BOLD : 0; color_attr[COLOR_WIN_NICK_HALFOP - 1] = (cfg_col_nick_halfop >= 0) ? cfg_col_nick_halfop & A_BOLD : 0; color_attr[COLOR_WIN_NICK_VOICE - 1] = (cfg_col_nick_voice >= 0) ? cfg_col_nick_voice & A_BOLD : 0; diff --git a/src/gui/gui.h b/src/gui/gui.h index 069e9346a..2268278aa 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -26,7 +26,7 @@ #define INPUT_BUFFER_BLOCK_SIZE 256 -#define NUM_COLORS 47 +#define NUM_COLORS 49 #define COLOR_WIN_TITLE 1 #define COLOR_WIN_CHAT 2 #define COLOR_WIN_CHAT_TIME 3 @@ -51,22 +51,24 @@ #define COLOR_WIN_INPUT_NICK 22 #define COLOR_WIN_NICK 23 #define COLOR_WIN_NICK_AWAY 24 -#define COLOR_WIN_NICK_OP 25 -#define COLOR_WIN_NICK_HALFOP 26 -#define COLOR_WIN_NICK_VOICE 27 -#define COLOR_WIN_NICK_SEP 28 -#define COLOR_WIN_NICK_SELF 29 -#define COLOR_WIN_NICK_PRIVATE 30 -#define COLOR_WIN_NICK_FIRST 31 -#define COLOR_WIN_NICK_LAST 40 +#define COLOR_WIN_NICK_CHANOWNER 25 +#define COLOR_WIN_NICK_CHANADMIN 26 +#define COLOR_WIN_NICK_OP 27 +#define COLOR_WIN_NICK_HALFOP 28 +#define COLOR_WIN_NICK_VOICE 29 +#define COLOR_WIN_NICK_SEP 30 +#define COLOR_WIN_NICK_SELF 31 +#define COLOR_WIN_NICK_PRIVATE 32 +#define COLOR_WIN_NICK_FIRST 33 +#define COLOR_WIN_NICK_LAST 42 #define COLOR_WIN_NICK_NUMBER (COLOR_WIN_NICK_LAST - COLOR_WIN_NICK_FIRST + 1) -#define COLOR_DCC_SELECTED 41 -#define COLOR_DCC_WAITING 42 -#define COLOR_DCC_CONNECTING 43 -#define COLOR_DCC_ACTIVE 44 -#define COLOR_DCC_DONE 45 -#define COLOR_DCC_FAILED 46 -#define COLOR_DCC_ABORTED 47 +#define COLOR_DCC_SELECTED 43 +#define COLOR_DCC_WAITING 44 +#define COLOR_DCC_CONNECTING 45 +#define COLOR_DCC_ACTIVE 46 +#define COLOR_DCC_DONE 47 +#define COLOR_DCC_FAILED 48 +#define COLOR_DCC_ABORTED 49 #define SERVER(buffer) ((t_irc_server *)(buffer->server)) #define CHANNEL(buffer) ((t_irc_channel *)(buffer->channel)) diff --git a/src/irc/irc-display.c b/src/irc/irc-display.c index 312d62fbe..e231027f7 100644 --- a/src/irc/irc-display.c +++ b/src/irc/irc-display.c @@ -73,29 +73,31 @@ irc_display_nick (t_gui_buffer *buffer, t_irc_nick *nick, int message_type, message_type, COLOR_WIN_CHAT_DARK, "<"); if (cfg_look_nickmode) { - if (nick->is_op) + if (nick->is_chanowner) + gui_printf_color_type (buffer, + message_type, + COLOR_WIN_NICK_OP, "~"); + else if (nick->is_chanadmin) + gui_printf_color_type (buffer, + message_type, + COLOR_WIN_NICK_OP, "&"); + else if (nick->is_op) gui_printf_color_type (buffer, message_type, COLOR_WIN_NICK_OP, "@"); + else if (nick->is_halfop) + gui_printf_color_type (buffer, + message_type, + COLOR_WIN_NICK_HALFOP, "%%"); + else if (nick->has_voice) + gui_printf_color_type (buffer, + message_type, + COLOR_WIN_NICK_VOICE, "+"); else - { - if (nick->is_halfop) + if (cfg_look_nickmode_empty && !no_nickmode) gui_printf_color_type (buffer, message_type, - COLOR_WIN_NICK_HALFOP, "%%"); - else - { - if (nick->has_voice) - gui_printf_color_type (buffer, - message_type, - COLOR_WIN_NICK_VOICE, "+"); - else - if (cfg_look_nickmode_empty && !no_nickmode) - gui_printf_color_type (buffer, - message_type, - COLOR_WIN_CHAT, " "); - } - } + COLOR_WIN_CHAT, " "); } if (color_nick < 0) gui_printf_color_type (buffer, diff --git a/src/irc/irc-nick.c b/src/irc/irc-nick.c index 6e1d4c498..5228325ed 100644 --- a/src/irc/irc-nick.c +++ b/src/irc/irc-nick.c @@ -64,8 +64,10 @@ nick_compare (t_irc_nick *nick1, t_irc_nick *nick2) { int score1, score2, comp; - score1 = - ( (nick1->is_op * 8) + (nick1->is_halfop * 4) + (nick1->has_voice * 2)); - score2 = - ( (nick2->is_op * 8) + (nick2->is_halfop * 4) + (nick2->has_voice * 2)); + score1 = - ( (nick1->is_chanowner * 32) + (nick1->is_chanadmin * 16) + + (nick1->is_op * 8) + (nick1->is_halfop * 4) + (nick1->has_voice * 2) ); + score2 = - ( (nick2->is_chanowner * 32) + (nick2->is_chanadmin * 16) + + (nick2->is_op * 8) + (nick2->is_halfop * 4) + (nick2->has_voice * 2) ); comp = strcasecmp(nick1->nick, nick2->nick); if (comp > 0) @@ -149,7 +151,8 @@ nick_insert_sorted (t_irc_channel *channel, t_irc_nick *nick) t_irc_nick * nick_new (t_irc_channel *channel, char *nick_name, - int is_op, int is_halfop, int has_voice) + int is_chanowner, int is_chanadmin, int is_op, int is_halfop, + int has_voice) { t_irc_nick *new_nick; @@ -157,6 +160,8 @@ nick_new (t_irc_channel *channel, char *nick_name, if ((new_nick = nick_search (channel, nick_name))) { /* update nick */ + new_nick->is_chanowner = is_chanowner; + new_nick->is_chanadmin = is_chanadmin; new_nick->is_op = is_op; new_nick->is_halfop = is_halfop; new_nick->has_voice = has_voice; @@ -173,6 +178,8 @@ nick_new (t_irc_channel *channel, char *nick_name, /* initialize new nick */ new_nick->nick = strdup (nick_name); + new_nick->is_chanowner = is_chanowner; + new_nick->is_chanadmin = is_chanadmin; new_nick->is_op = is_op; new_nick->is_halfop = is_halfop; new_nick->has_voice = has_voice; @@ -312,7 +319,7 @@ nick_count (t_irc_channel *channel, int *total, int *count_op, ptr_nick = ptr_nick->next_nick) { (*total)++; - if (ptr_nick->is_op) + if ((ptr_nick->is_chanowner) || (ptr_nick->is_chanadmin) || (ptr_nick->is_op)) (*count_op)++; else { diff --git a/src/irc/irc-recv.c b/src/irc/irc-recv.c index 85f43188e..09feddf7e 100644 --- a/src/irc/irc-recv.c +++ b/src/irc/irc-recv.c @@ -184,7 +184,7 @@ irc_cmd_recv_join (t_irc_server *server, char *host, char *arguments) _(" has joined ")); gui_printf_color (ptr_channel->buffer, COLOR_WIN_CHAT_CHANNEL, "%s\n", arguments); - (void) nick_new (ptr_channel, host, 0, 0, 0); + (void) nick_new (ptr_channel, host, 0, 0, 0, 0, 0); gui_draw_buffer_nick (ptr_channel->buffer, 1); return 0; } @@ -2826,7 +2826,7 @@ int irc_cmd_recv_353 (t_irc_server *server, char *host, char *arguments) { char *pos, *pos_nick; - int is_op, is_halfop, has_voice; + int is_chanowner, is_chanadmin, is_op, is_halfop, has_voice; t_irc_channel *ptr_channel; /* make gcc happy */ @@ -2872,6 +2872,8 @@ irc_cmd_recv_353 (t_irc_server *server, char *host, char *arguments) { while (pos && pos[0]) { + is_chanowner = 0; + is_chanadmin = 0; is_op = 0; is_halfop = 0; has_voice = 0; @@ -2885,6 +2887,16 @@ irc_cmd_recv_353 (t_irc_server *server, char *host, char *arguments) has_voice = 1; pos++; } + if (pos[0] == '~') + { + is_chanowner = 1; + pos++; + } + if (pos[0] == '&') + { + is_chanadmin = 1; + pos++; + } pos_nick = pos; pos = strchr (pos, ' '); if (pos) @@ -2892,7 +2904,8 @@ irc_cmd_recv_353 (t_irc_server *server, char *host, char *arguments) pos[0] = '\0'; pos++; } - if (!nick_new (ptr_channel, pos_nick, is_op, is_halfop, has_voice)) + if (!nick_new (ptr_channel, pos_nick, is_chanowner, is_chanadmin, + is_op, is_halfop, has_voice)) { irc_display_prefix (server->buffer, PREFIX_ERROR); gui_printf (server->buffer, diff --git a/src/irc/irc.h b/src/irc/irc.h index cb079c406..d0aef2aac 100644 --- a/src/irc/irc.h +++ b/src/irc/irc.h @@ -77,6 +77,8 @@ typedef struct t_irc_nick t_irc_nick; struct t_irc_nick { char *nick; /* nickname */ + int is_chanowner; /* chan owner? (specific to unrealircd) */ + int is_chanadmin; /* chan admin? (specific to unrealircd) */ int is_op; /* operator privileges? */ int is_halfop; /* half operaor privileges? */ int has_voice; /* nick has voice? */ @@ -257,7 +259,7 @@ extern void channel_set_away (t_irc_channel *, char *, int); /* nick functions (irc-nick.c) */ -extern t_irc_nick *nick_new (t_irc_channel *, char *, int, int, int); +extern t_irc_nick *nick_new (t_irc_channel *, char *, int, int, int, int, int); extern void nick_resort (t_irc_channel *, t_irc_nick *); extern void nick_change (t_irc_channel *, t_irc_nick *, char *); extern void nick_free (t_irc_channel *, t_irc_nick *); |