diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | doc/en/weechat_plugin_api.en.txt | 12 | ||||
-rw-r--r-- | doc/fr/weechat_plugin_api.fr.txt | 13 | ||||
-rw-r--r-- | doc/it/weechat_plugin_api.it.txt | 16 | ||||
-rw-r--r-- | src/core/wee-upgrade.c | 2 | ||||
-rw-r--r-- | src/gui/gui-buffer.c | 117 | ||||
-rw-r--r-- | src/gui/gui-buffer.h | 3 | ||||
-rw-r--r-- | src/gui/gui-line.c | 31 |
8 files changed, 195 insertions, 4 deletions
@@ -1,12 +1,14 @@ WeeChat ChangeLog ================= Sébastien Helleu <flashcode@flashtux.org> -v0.3.4-dev, 2010-10-09 +v0.3.4-dev, 2010-10-11 Version 0.3.4 (under dev!) -------------------------- +* core: add property "no_highlight_nicks" in buffers to disable highlight + for some nicks in buffer * core: add new options weechat.look.input_share and weechat.look.input_share_overwrite (task #9228) * core: add new option weechat.look.prefix_align_min (task #10650) @@ -19,6 +21,7 @@ Version 0.3.4 (under dev!) * api: add priority for hooks (task #10550) * api: add new functions: hashtable_get_string, hook_info_hashtable, info_get_hashtable +* irc: add tag "nick_xxx" in user messages * irc: move options from network section to server section: connection_timeout, anti_flood_prio_high, anti_flood_prio_low, away_check, away_check_max_nicks, default_msg_part, default_msg_quit (task #10664, task #10668) diff --git a/doc/en/weechat_plugin_api.en.txt b/doc/en/weechat_plugin_api.en.txt index 5f35210c8..2975dbbc4 100644 --- a/doc/en/weechat_plugin_api.en.txt +++ b/doc/en/weechat_plugin_api.en.txt @@ -7874,6 +7874,7 @@ Arguments: ** 'text_search_input': input saved before text search ** 'highlight_words': list of words to highlight ** 'highlight_tags': list of tags to highlight +** 'no_highlight_nicks': list of nicks to NOT highlight ** 'localvar_xxx': get content of local variable "xxx" (replace "xxx" by the name of variable to read) @@ -8030,6 +8031,17 @@ Arguments: | highlight_tags | comma separated list of tags | comma separated list of tags to highlight in this buffer +| no_highlight_nicks | comma separated list of nicks | + comma separated list of nicks to NOT highlight in this buffer, for example: + "joe,mike,robert" + +| no_highlight_nicks_add | comma separated list of nicks | + comma separated list of nicks to NOT highlight in this buffer, these words are + added to existing nicks in buffer + +| no_highlight_nicks_del | comma separated list of nicks | + comma separated list of nicks to remove from non highlighted nicks on buffer + | key_bind_xxx | any string | bind a new key 'xxx', specific to this buffer, value is command to execute for this key diff --git a/doc/fr/weechat_plugin_api.fr.txt b/doc/fr/weechat_plugin_api.fr.txt index 05a99ffb2..2945faa36 100644 --- a/doc/fr/weechat_plugin_api.fr.txt +++ b/doc/fr/weechat_plugin_api.fr.txt @@ -7982,6 +7982,7 @@ Paramètres : ** 'text_search_input': texte saisi sauvegardé avant la recherche de texte ** 'highlight_words': liste des mots pour le highlight ** 'highlight_tags': liste des étiquettes pour le highlight +** 'no_highlight_nicks': liste des pseudos à NE PAS mettre en valeur (highlight) ** 'localvar_xxx' : contenu de la variable locale "xxx" (remplacer "xxx" par le nom de la variable locale à lire) @@ -8145,6 +8146,18 @@ Paramètres : | highlight_tags | liste d'étiquettes ("tags") séparées par des virgules | liste d'étiquettes ("tags") à mettre en valeur pour ce tampon +| no_highlight_nicks | liste de pseudos séparés par des virgules | + liste de pseudos à NE PAS mettre en valeur dans ce tampon, par exemple : + "joe,mike,robert" + +| no_highlight_nicks_add | liste de pseudos séparés par des virgules | + liste de pseudos à NE PAS mettre en valeur dans ce tampon, ces mots sont + ajoutés aux pseudos existants pour le tampon + +| no_highlight_nicks_del | liste de pseudos séparés par des virgules | + liste de pseudos à supprimer de la liste des pseudos à ne pas mettre en + valeur dans ce tampon + | key_bind_xxx | toute chaîne | associe la nouvelle touche 'xxx', spécifique à ce tampon, la valeur est la commande à exécuter pour cette touche diff --git a/doc/it/weechat_plugin_api.it.txt b/doc/it/weechat_plugin_api.it.txt index 3d47211f6..82f164d26 100644 --- a/doc/it/weechat_plugin_api.it.txt +++ b/doc/it/weechat_plugin_api.it.txt @@ -7959,6 +7959,8 @@ Argomenti: ** 'text_search_input': input salvato prima della ricerca nel testo ** 'highlight_words': elenco di parole da evidenziare ** 'highlight_tags': elenco di tag da evidenziare +// TRANSLATION MISSING +** 'no_highlight_nicks': list of nicks to NOT highlight ** 'localvar_xxx': ottiene il contenuto della variabile locale "xxx" (sostituire "xxx" con il nome della variabile da leggere) @@ -8124,6 +8126,20 @@ Argomenti: | highlight_tags | elenco separato da virgole di tag | elenco separato da virgole di tag da evidenziare in questo buffer +// TRANSLATION MISSING +| no_highlight_nicks | comma separated list of nicks | + comma separated list of nicks to NOT highlight in this buffer, for example: + "joe,mike,robert" + +// TRANSLATION MISSING +| no_highlight_nicks_add | comma separated list of nicks | + comma separated list of nicks to NOT highlight in this buffer, these words are + added to existing nicks in buffer + +// TRANSLATION MISSING +| no_highlight_nicks_del | comma separated list of nicks | + comma separated list of nicks to remove from non highlighted nicks on buffer + | key_bind_xxx | qualsiasi stringa | assegna un nuovo tasto 'xxx', specifico per questo buffer, il valore è il comando da eseguire per questo tasto diff --git a/src/core/wee-upgrade.c b/src/core/wee-upgrade.c index 90983b1e5..f6810d091 100644 --- a/src/core/wee-upgrade.c +++ b/src/core/wee-upgrade.c @@ -412,6 +412,8 @@ upgrade_weechat_read_cb (void *data, infolist_string (infolist, "highlight_words")); gui_buffer_set_highlight_tags (upgrade_current_buffer, infolist_string (infolist, "highlight_tags")); + gui_buffer_set_no_highlight_nicks (upgrade_current_buffer, + infolist_string (infolist, "no_highlight_nicks")); index = 0; while (1) { diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c index 053abb559..4462458b8 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", + "highlight_words", "highlight_tags", "no_highlight_nicks", NULL }; char *gui_buffer_properties_get_pointer[] = @@ -95,8 +95,9 @@ char *gui_buffer_properties_set[] = { "unread", "display", "print_hooks_enabled", "number", "name", "short_name", "type", "notify", "title", "time_for_each_line", "nicklist", "nicklist_case_sensitive", "nicklist_display_groups", "highlight_words", - "highlight_words_add", "highlight_words_del", "highlight_tags", "input", - "input_pos", "input_get_unknown_commands", + "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", NULL }; @@ -459,6 +460,11 @@ 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); /* keys */ new_buffer->keys = NULL; @@ -748,6 +754,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_strncasecmp (property, "localvar_", 9) == 0) { ptr_value = (const char *)hashtable_get (buffer->local_variables, @@ -1096,6 +1104,87 @@ gui_buffer_set_highlight_tags (struct t_gui_buffer *buffer, } /* + * gui_buffer_set_no_highlight_nicks: set no_highlight_nicks for a buffer + */ + +void +gui_buffer_set_no_highlight_nicks (struct t_gui_buffer *buffer, + const char *new_no_highlight_nicks) +{ + char **nicks; + int nicks_count, i; + + hashtable_remove_all (buffer->no_highlight_nicks); + + if (new_no_highlight_nicks && new_no_highlight_nicks[0]) + { + nicks = string_split (new_no_highlight_nicks, ",", 0, 0, &nicks_count); + if (nicks) + { + for (i = 0; i < nicks_count; i++) + { + hashtable_set (buffer->no_highlight_nicks, nicks[i], NULL); + } + string_free_split (nicks); + } + } +} + +/* + * gui_buffer_add_no_highlight_nicks: add nicks to no_highlight_nicks for a + * buffer + */ + +void +gui_buffer_add_no_highlight_nicks (struct t_gui_buffer *buffer, + const char *nicks_to_add) +{ + char **nicks; + int nicks_count, i; + + if (!nicks_to_add) + return; + + 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); + } + string_free_split (nicks); + } +} + +/* + * gui_buffer_remove_no_highlight_nicks: remove nicks from no_highlight_nicks + * in a buffer + */ + +void +gui_buffer_remove_no_highlight_nicks (struct t_gui_buffer *buffer, + const char *nicks_to_remove) +{ + char **nicks; + int nicks_count, i; + + if (!nicks_to_remove) + return; + + 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]); + } + string_free_split (nicks); + } +} + +/* * gui_buffer_set_input_get_unknown_commands: set "input_get_unknown_commands" * flag for a buffer */ @@ -1268,6 +1357,18 @@ 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) + { + gui_buffer_set_no_highlight_nicks (buffer, value); + } + else if (string_strcasecmp (property, "no_highlight_nicks_add") == 0) + { + gui_buffer_add_no_highlight_nicks (buffer, value); + } + else if (string_strcasecmp (property, "no_highlight_nicks_del") == 0) + { + gui_buffer_remove_no_highlight_nicks (buffer, value); + } else if (string_strncasecmp (property, "key_bind_", 9) == 0) { gui_keyboard_bind (buffer, property + 9, value); @@ -1816,6 +1917,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); gui_keyboard_free_all (&buffer->keys, &buffer->last_key, &buffer->keys_count); gui_buffer_local_var_remove_all (buffer); @@ -2718,6 +2821,8 @@ 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"))) + return 0; i = 0; for (ptr_key = buffer->keys; ptr_key; ptr_key = ptr_key->next_key) { @@ -2898,6 +3003,12 @@ 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) + { + hashtable_print_log (ptr_buffer->no_highlight_nicks, + "no_highlight_nicks"); + } + if (ptr_buffer->keys) { log_printf (""); diff --git a/src/gui/gui-buffer.h b/src/gui/gui-buffer.h index 17be7ed1d..fbe8c4afb 100644 --- a/src/gui/gui-buffer.h +++ b/src/gui/gui-buffer.h @@ -162,6 +162,7 @@ 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 */ /* keys associated to buffer */ struct t_gui_key *keys; /* keys specific to buffer */ @@ -231,6 +232,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_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 3aa4b695c..f2cc03583 100644 --- a/src/gui/gui-line.c +++ b/src/gui/gui-line.c @@ -30,6 +30,7 @@ #include "../core/weechat.h" #include "../core/wee-config.h" +#include "../core/wee-hashtable.h" #include "../core/wee-hook.h" #include "../core/wee-infolist.h" #include "../core/wee-log.h" @@ -378,6 +379,24 @@ gui_line_match_tags (struct t_gui_line *line, int tags_count, } /* + * gui_line_get_nick_tag: get nick in tags: return "xxx" if tag "nick_xxx" + * is found + */ + +const char * +gui_line_get_nick_tag (struct t_gui_line *line) +{ + int i; + + for (i = 0; i < line->data->tags_count; i++) + { + if (strncmp (line->data->tags_array[i], "nick_", 5) == 0) + return line->data->tags_array[i] + 5; + } + return NULL; +} + +/* * gui_line_has_highlight: return 1 if given message contains highlight (with * a string in global highlight or buffer highlight) */ @@ -387,6 +406,7 @@ 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 @@ -414,6 +434,17 @@ 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); |