diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2010-11-29 10:17:09 +0100 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2010-11-29 10:17:09 +0100 |
commit | 528dc258cad61903569413a24c6492759a2ba69a (patch) | |
tree | 91364e90cadf4e074d3aff62ea46b89572e8c365 /src/gui | |
parent | b6833392fe1ef10d3d27a7898914d7c4cb5f2ecb (diff) | |
download | weechat-528dc258cad61903569413a24c6492759a2ba69a.zip |
Replace buffer local variable "no_highlight_nicks" by "hotlist_max_level_nicks"
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/gui-buffer.c | 129 | ||||
-rw-r--r-- | src/gui/gui-buffer.h | 9 | ||||
-rw-r--r-- | src/gui/gui-line.c | 32 |
3 files changed, 104 insertions, 66 deletions
diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c index 2ca98d253..1d326b874 100644 --- a/src/gui/gui-buffer.c +++ b/src/gui/gui-buffer.c @@ -84,7 +84,7 @@ char *gui_buffer_properties_get_integer[] = }; char *gui_buffer_properties_get_string[] = { "plugin", "name", "short_name", "title", "input", "text_search_input", - "highlight_words", "highlight_tags", "no_highlight_nicks", + "highlight_words", "highlight_tags", "hotlist_max_level_nicks", NULL }; char *gui_buffer_properties_get_pointer[] = @@ -96,8 +96,9 @@ char *gui_buffer_properties_set[] = "type", "notify", "title", "time_for_each_line", "nicklist", "nicklist_case_sensitive", "nicklist_display_groups", "highlight_words", "highlight_words_add", "highlight_words_del", "highlight_tags", - "no_highlight_nicks", "no_highlight_nicks_add", "no_highlight_nicks_del", - "input", "input_pos", "input_get_unknown_commands", + "hotlist_max_level_nicks", "hotlist_max_level_nicks_add", + "hotlist_max_level_nicks_del", "input", "input_pos", + "input_get_unknown_commands", NULL }; @@ -459,11 +460,13 @@ gui_buffer_new (struct t_weechat_plugin *plugin, new_buffer->highlight_tags = NULL; new_buffer->highlight_tags_count = 0; new_buffer->highlight_tags_array = NULL; - new_buffer->no_highlight_nicks = hashtable_new (8, - WEECHAT_HASHTABLE_STRING, - WEECHAT_HASHTABLE_STRING, - NULL, - NULL); + + /* hotlist */ + new_buffer->hotlist_max_level_nicks = hashtable_new (8, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_INTEGER, + NULL, + NULL); /* keys */ new_buffer->keys = NULL; @@ -752,8 +755,8 @@ gui_buffer_get_string (struct t_gui_buffer *buffer, const char *property) return buffer->highlight_words; else if (string_strcasecmp (property, "highlight_tags") == 0) return buffer->highlight_tags; - else if (string_strcasecmp (property, "no_highlight_nicks") == 0) - return hashtable_get_string (buffer->no_highlight_nicks, "keys"); + else if (string_strcasecmp (property, "hotlist_max_level_nicks") == 0) + return hashtable_get_string (buffer->hotlist_max_level_nicks, "keys_values"); else if (string_strncasecmp (property, "localvar_", 9) == 0) { ptr_value = (const char *)hashtable_get (buffer->local_variables, @@ -1103,26 +1106,41 @@ gui_buffer_set_highlight_tags (struct t_gui_buffer *buffer, } /* - * gui_buffer_set_no_highlight_nicks: set no_highlight_nicks for a buffer + * gui_buffer_set_hotlist_max_level_nicks: set hotlist_max_level_nicks for a + * buffer */ void -gui_buffer_set_no_highlight_nicks (struct t_gui_buffer *buffer, - const char *new_no_highlight_nicks) +gui_buffer_set_hotlist_max_level_nicks (struct t_gui_buffer *buffer, + const char *new_hotlist_max_level_nicks) { - char **nicks; - int nicks_count, i; + char **nicks, *pos, *error; + int nicks_count, value, i; + long number; - hashtable_remove_all (buffer->no_highlight_nicks); + hashtable_remove_all (buffer->hotlist_max_level_nicks); - if (new_no_highlight_nicks && new_no_highlight_nicks[0]) + if (new_hotlist_max_level_nicks && new_hotlist_max_level_nicks[0]) { - nicks = string_split (new_no_highlight_nicks, ",", 0, 0, &nicks_count); + nicks = string_split (new_hotlist_max_level_nicks, ",", 0, 0, + &nicks_count); if (nicks) { for (i = 0; i < nicks_count; i++) { - hashtable_set (buffer->no_highlight_nicks, nicks[i], NULL); + value = -1; + pos = strchr (nicks[i], ':'); + if (pos) + { + pos[0] = '\0'; + pos++; + error = NULL; + number = strtol (pos, &error, 10); + if (error && !error[0]) + value = (int)number; + } + hashtable_set (buffer->hotlist_max_level_nicks, nicks[i], + &value); } string_free_split (nicks); } @@ -1130,54 +1148,69 @@ gui_buffer_set_no_highlight_nicks (struct t_gui_buffer *buffer, } /* - * gui_buffer_add_no_highlight_nicks: add nicks to no_highlight_nicks for a - * buffer + * gui_buffer_add_hotlist_max_level_nicks: add nicks to hotlist_max_level_nicks + * for a buffer */ void -gui_buffer_add_no_highlight_nicks (struct t_gui_buffer *buffer, - const char *nicks_to_add) +gui_buffer_add_hotlist_max_level_nicks (struct t_gui_buffer *buffer, + const char *nicks_to_add) { - char **nicks; - int nicks_count, i; + char **nicks, *pos, *error; + int nicks_count, value, i; + long number; if (!nicks_to_add) return; - nicks = string_split (nicks_to_add, ",", 0, 0, - &nicks_count); + nicks = string_split (nicks_to_add, ",", 0, 0, &nicks_count); if (nicks) { for (i = 0; i < nicks_count; i++) { - hashtable_set (buffer->no_highlight_nicks, nicks[i], NULL); + value = -1; + pos = strchr (nicks[i], ':'); + if (pos) + { + pos[0] = '\0'; + pos++; + error = NULL; + number = strtol (pos, &error, 10); + if (error && !error[0]) + value = (int)number; + } + hashtable_set (buffer->hotlist_max_level_nicks, nicks[i], + &value); } string_free_split (nicks); } } /* - * gui_buffer_remove_no_highlight_nicks: remove nicks from no_highlight_nicks - * in a buffer + * gui_buffer_remove_hotlist_max_level_nicks: remove nicks from + * hotlist_max_level_nicks in a + * buffer */ void -gui_buffer_remove_no_highlight_nicks (struct t_gui_buffer *buffer, - const char *nicks_to_remove) +gui_buffer_remove_hotlist_max_level_nicks (struct t_gui_buffer *buffer, + const char *nicks_to_remove) { - char **nicks; + char **nicks, *pos; int nicks_count, i; if (!nicks_to_remove) return; - nicks = string_split (nicks_to_remove, ",", 0, 0, - &nicks_count); + nicks = string_split (nicks_to_remove, ",", 0, 0, &nicks_count); if (nicks) { for (i = 0; i < nicks_count; i++) { - hashtable_remove (buffer->no_highlight_nicks, nicks[i]); + pos = strchr (nicks[i], ':'); + if (pos) + pos[0] = '\0'; + hashtable_remove (buffer->hotlist_max_level_nicks, nicks[i]); } string_free_split (nicks); } @@ -1356,17 +1389,17 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property, { gui_buffer_set_highlight_tags (buffer, value); } - else if (string_strcasecmp (property, "no_highlight_nicks") == 0) + else if (string_strcasecmp (property, "hotlist_max_level_nicks") == 0) { - gui_buffer_set_no_highlight_nicks (buffer, value); + gui_buffer_set_hotlist_max_level_nicks (buffer, value); } - else if (string_strcasecmp (property, "no_highlight_nicks_add") == 0) + else if (string_strcasecmp (property, "hotlist_max_level_nicks_add") == 0) { - gui_buffer_add_no_highlight_nicks (buffer, value); + gui_buffer_add_hotlist_max_level_nicks (buffer, value); } - else if (string_strcasecmp (property, "no_highlight_nicks_del") == 0) + else if (string_strcasecmp (property, "hotlist_max_level_nicks_del") == 0) { - gui_buffer_remove_no_highlight_nicks (buffer, value); + gui_buffer_remove_hotlist_max_level_nicks (buffer, value); } else if (string_strncasecmp (property, "key_bind_", 9) == 0) { @@ -1944,8 +1977,8 @@ gui_buffer_close (struct t_gui_buffer *buffer) free (buffer->highlight_tags); if (buffer->highlight_tags_array) string_free_split (buffer->highlight_tags_array); - if (buffer->no_highlight_nicks) - hashtable_free (buffer->no_highlight_nicks); + if (buffer->hotlist_max_level_nicks) + hashtable_free (buffer->hotlist_max_level_nicks); gui_keyboard_free_all (&buffer->keys, &buffer->last_key, &buffer->keys_count); gui_buffer_local_var_remove_all (buffer); @@ -2848,7 +2881,7 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist, return 0; if (!infolist_new_var_string (ptr_item, "highlight_tags", buffer->highlight_tags)) return 0; - if (!infolist_new_var_string (ptr_item, "no_highlight_nicks", hashtable_get_string (buffer->no_highlight_nicks, "keys"))) + if (!infolist_new_var_string (ptr_item, "hotlist_max_level_nicks", hashtable_get_string (buffer->hotlist_max_level_nicks, "keys_values"))) return 0; i = 0; for (ptr_key = buffer->keys; ptr_key; ptr_key = ptr_key->next_key) @@ -3030,10 +3063,10 @@ gui_buffer_print_log () log_printf (" prev_buffer. . . . . . : 0x%lx", ptr_buffer->prev_buffer); log_printf (" next_buffer. . . . . . : 0x%lx", ptr_buffer->next_buffer); - if (ptr_buffer->no_highlight_nicks) + if (ptr_buffer->hotlist_max_level_nicks) { - hashtable_print_log (ptr_buffer->no_highlight_nicks, - "no_highlight_nicks"); + hashtable_print_log (ptr_buffer->hotlist_max_level_nicks, + "hotlist_max_level_nicks"); } if (ptr_buffer->keys) diff --git a/src/gui/gui-buffer.h b/src/gui/gui-buffer.h index b296d2d58..16cdf496c 100644 --- a/src/gui/gui-buffer.h +++ b/src/gui/gui-buffer.h @@ -162,7 +162,10 @@ struct t_gui_buffer int highlight_tags_count; /* number of tags to highlight */ /* (if 0, any tag is highlighted) */ char **highlight_tags_array; /* tags to highlight */ - struct t_hashtable *no_highlight_nicks; /* nicks to NOT highlight */ + + /* hotlist settings for buffer */ + struct t_hashtable *hotlist_max_level_nicks; /* max hotlist level for */ + /* some nicks */ /* keys associated to buffer */ struct t_gui_key *keys; /* keys specific to buffer */ @@ -232,8 +235,8 @@ extern void gui_buffer_set_highlight_words (struct t_gui_buffer *buffer, const char *new_highlight_words); extern void gui_buffer_set_highlight_tags (struct t_gui_buffer *buffer, const char *new_highlight_tags); -extern void gui_buffer_set_no_highlight_nicks (struct t_gui_buffer *buffer, - const char *new_no_highlight_nicks); +extern void gui_buffer_set_hotlist_max_level_nicks (struct t_gui_buffer *buffer, + const char *new_hotlist_max_level_nicks); extern void gui_buffer_set_unread (struct t_gui_buffer *buffer); extern void gui_buffer_set (struct t_gui_buffer *buffer, const char *property, const char *value); diff --git a/src/gui/gui-line.c b/src/gui/gui-line.c index 102d5d7ac..dca583de1 100644 --- a/src/gui/gui-line.c +++ b/src/gui/gui-line.c @@ -406,7 +406,6 @@ gui_line_has_highlight (struct t_gui_line *line) { int rc, i; char *msg_no_color, *highlight_words; - const char *nick; /* * highlights are disabled on this buffer? (special value "-" means that @@ -434,17 +433,6 @@ gui_line_has_highlight (struct t_gui_line *line) line->data->buffer->highlight_tags_array)) return 0; } - - /* - * if a nick is defined in tags ("nick_xxx"), then check if highlight is - * disabled for this nick (using hashtable buffer->no_highlight_nicks) - */ - nick = gui_line_get_nick_tag (line); - if (nick) - { - if (hashtable_has_key (line->data->buffer->no_highlight_nicks, nick)) - return 0; - } /* remove color codes from line message */ msg_no_color = gui_color_decode (line->data->message, NULL); @@ -762,7 +750,8 @@ gui_line_add (struct t_gui_buffer *buffer, time_t date, struct t_gui_line_data *new_line_data; struct t_gui_window *ptr_win; char *message_for_signal; - int notify_level; + const char *nick; + int notify_level, *max_notify_level; new_line = malloc (sizeof (*new_line)); if (!new_line) @@ -803,11 +792,23 @@ gui_line_add (struct t_gui_buffer *buffer, time_t date, new_line->data->prefix_length = (prefix) ? gui_chat_strlen_screen (prefix) : 0; new_line->data->message = (message) ? strdup (message) : strdup (""); - new_line->data->highlight = gui_line_has_highlight (new_line); + /* get notify level and max notify level for nick in buffer */ notify_level = gui_line_get_notify_level (new_line); + nick = gui_line_get_nick_tag (new_line); + max_notify_level = NULL; + if (nick) + max_notify_level = hashtable_get (buffer->hotlist_max_level_nicks, nick); + if (max_notify_level + && (*max_notify_level < notify_level)) + notify_level = *max_notify_level; + if (notify_level == GUI_HOTLIST_HIGHLIGHT) new_line->data->highlight = 1; + else if (max_notify_level && (*max_notify_level < GUI_HOTLIST_HIGHLIGHT)) + new_line->data->highlight = 0; + else + new_line->data->highlight = gui_line_has_highlight (new_line); /* add line to lines list */ gui_line_add_to_list (buffer->own_lines, new_line); @@ -844,7 +845,8 @@ gui_line_add (struct t_gui_buffer *buffer, time_t date, free (message_for_signal); } } - gui_hotlist_add (buffer, notify_level, NULL, 1); + if (notify_level >= GUI_HOTLIST_MIN) + gui_hotlist_add (buffer, notify_level, NULL, 1); } } else |