diff options
author | Sébastien Helleu <flashcode@flashtux.org> | 2017-06-19 21:41:48 +0200 |
---|---|---|
committer | Sébastien Helleu <flashcode@flashtux.org> | 2017-06-25 16:35:28 +0200 |
commit | 98272393feefa03a0a995d22190cc3296bfb0e6c (patch) | |
tree | b1a83142375c167ef0fe220171c4d814d7ed15e0 /src/plugins | |
parent | a49e255d964c25710e3347d07a5b5f50fae1b745 (diff) | |
download | weechat-98272393feefa03a0a995d22190cc3296bfb0e6c.zip |
fset: add ${newline} to display options on multiple lines, replace format options by colors for background
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/fset/fset-buffer.c | 243 | ||||
-rw-r--r-- | src/plugins/fset/fset-buffer.h | 2 | ||||
-rw-r--r-- | src/plugins/fset/fset-command.c | 2 | ||||
-rw-r--r-- | src/plugins/fset/fset-config.c | 181 | ||||
-rw-r--r-- | src/plugins/fset/fset-config.h | 7 | ||||
-rw-r--r-- | src/plugins/fset/fset-option.c | 2 |
6 files changed, 203 insertions, 234 deletions
diff --git a/src/plugins/fset/fset-buffer.c b/src/plugins/fset/fset-buffer.c index c6a7bb87f..8bb424897 100644 --- a/src/plugins/fset/fset-buffer.c +++ b/src/plugins/fset/fset-buffer.c @@ -151,19 +151,18 @@ fset_buffer_fills_field (char *field, int size, */ void -fset_buffer_display_line (int y, struct t_fset_option *fset_option) +fset_buffer_display_line (int index, struct t_fset_option *fset_option) { - char *line, str_field[4096], str_color_value[128], str_color_quotes[128]; - char str_number[64]; - const char *ptr_field, *ptr_parent_value, *ptr_format; - int selected_line; + char *line, str_color_line[128], *color_line, **lines, str_field[4096]; + char str_color_value[128], str_color_quotes[128], str_number[64]; + int selected_line, y, i, num_lines; int default_value_undef, value_undef, value_changed; - int type, marked, add_quotes, add_quotes_parent, format_number; + int add_quotes, add_quotes_parent, format_number; if (!fset_option) return; - selected_line = (y == fset_buffer_selected_line) ? 1 : 0; + selected_line = (index == fset_buffer_selected_line) ? 1 : 0; default_value_undef = (fset_option->default_value == NULL) ? 1 : 0; value_undef = (fset_option->value == NULL) ? 1 : 0; @@ -174,9 +173,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "fset_option", fset_option); /* file */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "file"); - snprintf (str_field, sizeof (str_field), "%s", ptr_field); + snprintf (str_field, sizeof (str_field), "%s", fset_option->file); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__file", str_field); snprintf (str_field, sizeof (str_field), @@ -186,7 +183,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) (value_changed) ? fset_config_color_name_changed[selected_line] : fset_config_color_name[selected_line])), - (ptr_field) ? ptr_field : ""); + (fset_option->file) ? fset_option->file : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_file", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "file", 16, 1); @@ -194,9 +191,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "file", str_field); /* section */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "section"); - snprintf (str_field, sizeof (str_field), "%s", ptr_field); + snprintf (str_field, sizeof (str_field), "%s", fset_option->section); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__section", str_field); snprintf (str_field, sizeof (str_field), @@ -206,7 +201,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) (value_changed) ? fset_config_color_name_changed[selected_line] : fset_config_color_name[selected_line])), - (ptr_field) ? ptr_field : ""); + (fset_option->section) ? fset_option->section : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_section", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "section", 16, 1); @@ -214,9 +209,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "section", str_field); /* option */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "option"); - snprintf (str_field, sizeof (str_field), "%s", ptr_field); + snprintf (str_field, sizeof (str_field), "%s", fset_option->option); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__option", str_field); snprintf (str_field, sizeof (str_field), @@ -226,7 +219,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) (value_changed) ? fset_config_color_name_changed[selected_line] : fset_config_color_name[selected_line])), - (ptr_field) ? ptr_field : ""); + (fset_option->option) ? fset_option->option : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_option", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "option", 16, 1); @@ -234,9 +227,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "option", str_field); /* name */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "name"); - snprintf (str_field, sizeof (str_field), "%s", ptr_field); + snprintf (str_field, sizeof (str_field), "%s", fset_option->name); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__name", str_field); snprintf (str_field, sizeof (str_field), @@ -246,7 +237,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) (value_changed) ? fset_config_color_name_changed[selected_line] : fset_config_color_name[selected_line])), - (ptr_field) ? ptr_field : ""); + (fset_option->name) ? fset_option->name : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_name", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "name", 64, 1); @@ -254,15 +245,13 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "name", str_field); /* parent_name */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "parent_name"); - snprintf (str_field, sizeof (str_field), "%s", ptr_field); + snprintf (str_field, sizeof (str_field), "%s", fset_option->parent_name); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__parent_name", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_parent_name[selected_line])), - (ptr_field) ? ptr_field : ""); + (fset_option->parent_name) ? fset_option->parent_name : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_parent_name", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "parent_name", 64, 1); @@ -270,15 +259,14 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "parent_name", str_field); /* type */ - type = weechat_hdata_integer (fset_hdata_fset_option, fset_option, "type"); snprintf (str_field, sizeof (str_field), - "%s", _(fset_option_type_string[type])); + "%s", _(fset_option_type_string[fset_option->type])); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__type", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_type[selected_line])), - _(fset_option_type_string[type])); + _(fset_option_type_string[fset_option->type])); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_type", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "type", 8, 1); @@ -287,13 +275,13 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) /* type_en */ snprintf (str_field, sizeof (str_field), - "%s", fset_option_type_string[type]); + "%s", fset_option_type_string[fset_option->type]); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__type_en", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_type[selected_line])), - fset_option_type_string[type]); + fset_option_type_string[fset_option->type]); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_type_en", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "type_en", 8, 1); @@ -302,13 +290,13 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) /* type_short */ snprintf (str_field, sizeof (str_field), - "%s", fset_option_type_string_short[type]); + "%s", fset_option_type_string_short[fset_option->type]); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__type_short", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_type[selected_line])), - fset_option_type_string_short[type]); + fset_option_type_string_short[fset_option->type]); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_type_short", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "type_short", 4, 1); @@ -317,13 +305,13 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) /* type_tiny */ snprintf (str_field, sizeof (str_field), - "%s", fset_option_type_string_tiny[type]); + "%s", fset_option_type_string_tiny[fset_option->type]); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__type_tiny", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_type[selected_line])), - fset_option_type_string_tiny[type]); + fset_option_type_string_tiny[fset_option->type]); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_type_tiny", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "type_tiny", 1, 1); @@ -331,9 +319,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "type_tiny", str_field); /* default_value */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "default_value"); - add_quotes = (ptr_field && (fset_option->type == FSET_OPTION_TYPE_STRING)) ? 1 : 0; + add_quotes = (fset_option->default_value && (fset_option->type == FSET_OPTION_TYPE_STRING)) ? 1 : 0; snprintf (str_color_value, sizeof (str_color_value), "%s", weechat_color ( @@ -342,7 +328,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) fset_config_color_value_undef[selected_line] : fset_config_color_default_value[selected_line]))); snprintf (str_field, sizeof (str_field), - "%s", (ptr_field) ? ptr_field : FSET_OPTION_VALUE_NULL); + "%s", (fset_option->default_value) ? fset_option->default_value : FSET_OPTION_VALUE_NULL); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__default_value", str_field); snprintf (str_field, sizeof (str_field), @@ -350,7 +336,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) (add_quotes) ? weechat_color (weechat_config_string (fset_config_color_quotes[selected_line])) : "", (add_quotes) ? "\"" : "", str_color_value, - (ptr_field) ? ptr_field : FSET_OPTION_VALUE_NULL, + (fset_option->default_value) ? fset_option->default_value : FSET_OPTION_VALUE_NULL, (add_quotes) ? weechat_color (weechat_config_string (fset_config_color_quotes[selected_line])) : "", (add_quotes) ? "\"" : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, @@ -360,9 +346,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "default_value", str_field); /* value */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "value"); - add_quotes = (ptr_field && (fset_option->type == FSET_OPTION_TYPE_STRING)) ? 1 : 0; + add_quotes = (fset_option->value && (fset_option->type == FSET_OPTION_TYPE_STRING)) ? 1 : 0; if ((fset_option->type == FSET_OPTION_TYPE_COLOR) && weechat_config_boolean (fset_config_look_use_color_value)) { @@ -410,7 +394,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) fset_config_color_quotes[selected_line]))); } snprintf (str_field, sizeof (str_field), - "%s", (ptr_field) ? ptr_field : FSET_OPTION_VALUE_NULL); + "%s", (fset_option->value) ? fset_option->value : FSET_OPTION_VALUE_NULL); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__value", str_field); snprintf (str_field, sizeof (str_field), @@ -418,7 +402,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) (add_quotes) ? str_color_quotes : "", (add_quotes) ? "\"" : "", str_color_value, - (ptr_field) ? ptr_field : FSET_OPTION_VALUE_NULL, + (fset_option->value) ? fset_option->value : FSET_OPTION_VALUE_NULL, (add_quotes) ? str_color_quotes : "", (add_quotes) ? "\"" : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, @@ -428,15 +412,13 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "value", str_field); /* value2 (value with parent value in case of inherited value) */ - ptr_parent_value = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "parent_value"); - if (value_undef && ptr_parent_value) + if (value_undef && fset_option->parent_value) { - add_quotes_parent = (ptr_parent_value && (fset_option->type == FSET_OPTION_TYPE_STRING)) ? 1 : 0; + add_quotes_parent = (fset_option->parent_value && (fset_option->type == FSET_OPTION_TYPE_STRING)) ? 1 : 0; snprintf (str_field, sizeof (str_field), "%s -> %s", - (ptr_field) ? ptr_field : FSET_OPTION_VALUE_NULL, - (ptr_parent_value) ? ptr_parent_value : FSET_OPTION_VALUE_NULL); + (fset_option->value) ? fset_option->value : FSET_OPTION_VALUE_NULL, + (fset_option->parent_value) ? fset_option->parent_value : FSET_OPTION_VALUE_NULL); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__value2", str_field); snprintf (str_field, sizeof (str_field), @@ -444,14 +426,14 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) (add_quotes) ? str_color_quotes : "", (add_quotes) ? "\"" : "", str_color_value, - (ptr_field) ? ptr_field : FSET_OPTION_VALUE_NULL, + (fset_option->value) ? fset_option->value : FSET_OPTION_VALUE_NULL, (add_quotes) ? str_color_quotes : "", (add_quotes) ? "\"" : "", weechat_color ("default"), (add_quotes_parent) ? weechat_color (weechat_config_string (fset_config_color_quotes[selected_line])) : "", (add_quotes_parent) ? "\"" : "", weechat_color (weechat_config_string (fset_config_color_parent_value[selected_line])), - (ptr_parent_value) ? ptr_parent_value : FSET_OPTION_VALUE_NULL, + (fset_option->parent_value) ? fset_option->parent_value : FSET_OPTION_VALUE_NULL, (add_quotes_parent) ? weechat_color (weechat_config_string (fset_config_color_quotes[selected_line])) : "", (add_quotes_parent) ? "\"" : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, @@ -464,7 +446,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) { snprintf (str_field, sizeof (str_field), "%s", - (ptr_field) ? ptr_field : FSET_OPTION_VALUE_NULL); + (fset_option->value) ? fset_option->value : FSET_OPTION_VALUE_NULL); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__value2", str_field); snprintf (str_field, sizeof (str_field), @@ -472,7 +454,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) (add_quotes) ? str_color_quotes : "", (add_quotes) ? "\"" : "", str_color_value, - (ptr_field) ? ptr_field : FSET_OPTION_VALUE_NULL, + (fset_option->value) ? fset_option->value : FSET_OPTION_VALUE_NULL, (add_quotes) ? str_color_quotes : "", (add_quotes) ? "\"" : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, @@ -483,12 +465,12 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) } /* parent_value (set only if value is NULL and inherited from parent) */ - if (value_undef && ptr_parent_value) + if (value_undef && fset_option->parent_value) { - add_quotes_parent = (ptr_parent_value && (fset_option->type == FSET_OPTION_TYPE_STRING)) ? 1 : 0; + add_quotes_parent = (fset_option->parent_value && (fset_option->type == FSET_OPTION_TYPE_STRING)) ? 1 : 0; snprintf (str_field, sizeof (str_field), "%s", - (ptr_parent_value) ? ptr_parent_value : FSET_OPTION_VALUE_NULL); + (fset_option->parent_value) ? fset_option->parent_value : FSET_OPTION_VALUE_NULL); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__parent_value", str_field); snprintf (str_field, sizeof (str_field), @@ -496,7 +478,7 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) (add_quotes_parent) ? weechat_color (weechat_config_string (fset_config_color_quotes[selected_line])) : "", (add_quotes_parent) ? "\"" : "", weechat_color (weechat_config_string (fset_config_color_parent_value[selected_line])), - (ptr_parent_value) ? ptr_parent_value : FSET_OPTION_VALUE_NULL, + (fset_option->parent_value) ? fset_option->parent_value : FSET_OPTION_VALUE_NULL, (add_quotes_parent) ? weechat_color (weechat_config_string (fset_config_color_quotes[selected_line])) : "", (add_quotes_parent) ? "\"" : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, @@ -518,15 +500,13 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) } /* min */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "min"); - snprintf (str_field, sizeof (str_field), "%s", ptr_field); + snprintf (str_field, sizeof (str_field), "%s", fset_option->min); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__min", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_min[selected_line])), - (ptr_field) ? ptr_field : ""); + (fset_option->min) ? fset_option->min : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_min", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "min", 8, 1); @@ -534,15 +514,13 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "min", str_field); /* max */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "max"); - snprintf (str_field, sizeof (str_field), "%s", ptr_field); + snprintf (str_field, sizeof (str_field), "%s", fset_option->max); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__max", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_max[selected_line])), - (ptr_field) ? ptr_field : ""); + (fset_option->max) ? fset_option->max : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_max", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "max", 8, 1); @@ -550,16 +528,14 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "max", str_field); /* description */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "description"); snprintf (str_field, sizeof (str_field), - "%s", (ptr_field && ptr_field[0]) ? _(ptr_field) : ""); + "%s", (fset_option->description && fset_option->description[0]) ? _(fset_option->description) : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__description", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_description[selected_line])), - (ptr_field && ptr_field[0]) ? _(ptr_field) : ""); + (fset_option->description && fset_option->description[0]) ? _(fset_option->description) : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_description", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "description", 64, 1); @@ -567,16 +543,14 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "description", str_field); /* description2 */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "description"); snprintf (str_field, sizeof (str_field), - "%s", (ptr_field && ptr_field[0]) ? _(ptr_field) : _("(no description)")); + "%s", (fset_option->description && fset_option->description[0]) ? _(fset_option->description) : _("(no description)")); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__description2", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_description[selected_line])), - (ptr_field && ptr_field[0]) ? _(ptr_field) : _("(no description)")); + (fset_option->description && fset_option->description[0]) ? _(fset_option->description) : _("(no description)")); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_description2", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "description2", 64, 1); @@ -584,15 +558,13 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "description2", str_field); /* description_en */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "description"); - snprintf (str_field, sizeof (str_field), "%s", ptr_field); + snprintf (str_field, sizeof (str_field), "%s", fset_option->description); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__description_en", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_description[selected_line])), - (ptr_field) ? ptr_field : ""); + (fset_option->description) ? fset_option->description : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_description_en", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "description_en", 64, 1); @@ -600,16 +572,14 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "description_en", str_field); /* description_en2 */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "description"); snprintf (str_field, sizeof (str_field), - "%s", (ptr_field && ptr_field[0]) ? ptr_field : "(no description)"); + "%s", (fset_option->description && fset_option->description[0]) ? fset_option->description : "(no description)"); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__description_en2", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_description[selected_line])), - (ptr_field && ptr_field[0]) ? ptr_field : "(no description)"); + (fset_option->description && fset_option->description[0]) ? fset_option->description : "(no description)"); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_description_en2", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "description_en2", 64, 1); @@ -617,15 +587,13 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "description_en2", str_field); /* string_values */ - ptr_field = weechat_hdata_string (fset_hdata_fset_option, - fset_option, "string_values"); - snprintf (str_field, sizeof (str_field), "%s", ptr_field); + snprintf (str_field, sizeof (str_field), "%s", fset_option->string_values); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__string_values", str_field); snprintf (str_field, sizeof (str_field), "%s%s", weechat_color (weechat_config_string (fset_config_color_string_values[selected_line])), - (ptr_field) ? ptr_field : ""); + (fset_option->string_values) ? fset_option->string_values : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_string_values", str_field); fset_buffer_fills_field (str_field, sizeof (str_field), "string_values", 32, 1); @@ -633,21 +601,19 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "string_values", str_field); /* marked */ - marked = weechat_hdata_integer (fset_hdata_fset_option, - fset_option, "marked"); snprintf (str_field, sizeof (str_field), "%s", - (marked) ? + (fset_option->marked) ? weechat_config_string (fset_config_look_marked_string) : weechat_config_string (fset_config_look_unmarked_string)); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__marked", str_field); snprintf (str_field, sizeof (str_field), "%s%s", - (marked) ? + (fset_option->marked) ? weechat_color (weechat_config_string (fset_config_color_marked[selected_line])) : weechat_color (weechat_config_string (fset_config_color_unmarked[selected_line])), - (marked) ? + (fset_option->marked) ? weechat_config_string (fset_config_look_marked_string) : weechat_config_string (fset_config_look_unmarked_string)); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, @@ -657,13 +623,13 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) "marked", str_field); /* index */ - snprintf (str_field, sizeof (str_field), "%d", y + 1); + snprintf (str_field, sizeof (str_field), "%d", index + 1); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "__index", str_field); snprintf (str_field, sizeof (str_field), "%s%d", weechat_color (weechat_config_string (fset_config_color_index[selected_line])), - y + 1); + index + 1); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_index", str_field); snprintf (str_number, sizeof (str_number), @@ -688,31 +654,55 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "selected_line", (selected_line) ? "1" : "0"); + weechat_hashtable_set (fset_buffer_hashtable_extra_vars, + "newline", "\r\n"); /* build string for line */ + color_line = NULL; format_number = weechat_config_integer (fset_config_look_format_number); if (selected_line) { - ptr_format = fset_config_eval_format_option_selected[format_number - 1]; + snprintf (str_color_line, sizeof (str_color_line), + ",%s", + weechat_config_string ( + fset_config_color_line_selected_bg[format_number - 1])); + color_line = strdup (weechat_color (str_color_line)); } else if (fset_option->marked) { - ptr_format = fset_config_eval_format_option_marked[format_number - 1]; - } - else - { - ptr_format = weechat_config_string ( - fset_config_format_option[format_number - 1]); + snprintf (str_color_line, sizeof (str_color_line), + ",%s", + weechat_config_string ( + fset_config_color_line_marked_bg[format_number - 1])); + color_line = strdup (weechat_color (str_color_line)); } - line = weechat_string_eval_expression (ptr_format, - fset_buffer_hashtable_pointers, - fset_buffer_hashtable_extra_vars, - NULL); + + /* evaluate line */ + line = weechat_string_eval_expression ( + weechat_config_string (fset_config_format_option[format_number - 1]), + fset_buffer_hashtable_pointers, + fset_buffer_hashtable_extra_vars, + NULL); if (line) { - weechat_printf_y (fset_buffer, y, "%s", line); + lines = weechat_string_split (line, "\r\n", 0, 0, &num_lines); + if (lines) + { + y = index * fset_config_format_option_num_lines[format_number - 1]; + for (i = 0; i < num_lines; i++) + { + weechat_printf_y (fset_buffer, y, "%s%s", + (color_line) ? color_line : "", + lines[i]); + y++; + } + weechat_string_free_split (lines); + } free (line); } + + if (color_line) + free (color_line); } /* @@ -821,7 +811,8 @@ void fset_buffer_check_line_outside_window () { struct t_gui_window *window; - int start_line_y, chat_height; + int start_line_y, chat_height, format_number, lines_per_option; + int selected_y, selected_y2; char str_command[256]; window = weechat_window_search_with_buffer (fset_buffer); @@ -829,16 +820,24 @@ fset_buffer_check_line_outside_window () return; fset_buffer_get_window_info (window, &start_line_y, &chat_height); - if ((start_line_y > fset_buffer_selected_line) - || (start_line_y <= fset_buffer_selected_line - chat_height)) + + format_number = weechat_config_integer (fset_config_look_format_number); + lines_per_option = fset_config_format_option_num_lines[format_number - 1]; + if (lines_per_option > chat_height) + return; + selected_y = fset_buffer_selected_line * lines_per_option; + selected_y2 = selected_y + lines_per_option - 1; + + if ((start_line_y > selected_y) + || (start_line_y < selected_y2 - chat_height + 1)) { snprintf (str_command, sizeof (str_command), "/window scroll -window %d %s%d", weechat_window_get_integer (window, "number"), - (start_line_y > fset_buffer_selected_line) ? "-" : "+", - (start_line_y > fset_buffer_selected_line) ? - start_line_y - fset_buffer_selected_line : - fset_buffer_selected_line - start_line_y - chat_height + 1); + (start_line_y > selected_y) ? "-" : "+", + (start_line_y > selected_y) ? + start_line_y - selected_y : + selected_y2 - start_line_y - chat_height + 1); weechat_command (fset_buffer, str_command); } } @@ -853,6 +852,7 @@ fset_buffer_window_scrolled_cb (const void *pointer, void *data, void *signal_data) { int start_line_y, chat_height, line, num_options; + int format_number, lines_per_option; /* make C compiler happy */ (void) pointer; @@ -866,17 +866,20 @@ fset_buffer_window_scrolled_cb (const void *pointer, void *data, fset_buffer_get_window_info (signal_data, &start_line_y, &chat_height); + format_number = weechat_config_integer (fset_config_look_format_number); + lines_per_option = fset_config_format_option_num_lines[format_number - 1]; line = fset_buffer_selected_line; - while (line < start_line_y) + while (line * lines_per_option < start_line_y) { - line += chat_height; + line += chat_height / lines_per_option; } - while (line >= start_line_y + chat_height) + while (line * lines_per_option >= start_line_y + chat_height) { - line -= chat_height; + line -= chat_height / lines_per_option; } - if (line < start_line_y) - line = start_line_y; + if (line * lines_per_option < start_line_y) + line = (start_line_y / lines_per_option) + 1; + num_options = weechat_arraylist_size (fset_options); if (line >= num_options) line = num_options - 1; diff --git a/src/plugins/fset/fset-buffer.h b/src/plugins/fset/fset-buffer.h index ac30383fb..df031a53c 100644 --- a/src/plugins/fset/fset-buffer.h +++ b/src/plugins/fset/fset-buffer.h @@ -28,7 +28,7 @@ extern struct t_gui_buffer *fset_buffer; extern int fset_buffer_selected_line; extern void fset_buffer_set_title (); -extern void fset_buffer_display_line (int y, +extern void fset_buffer_display_line (int index, struct t_fset_option *fset_option); extern void fset_buffer_refresh (int clear); extern void fset_buffer_set_current_line (int line); diff --git a/src/plugins/fset/fset-command.c b/src/plugins/fset/fset-command.c index d50495b20..505bfe283 100644 --- a/src/plugins/fset/fset-command.c +++ b/src/plugins/fset/fset-command.c @@ -694,6 +694,8 @@ fset_command_init () " - other data:\n" " - ${selected_line}: \"1\" if the line is selected, " "otherwise \"0\"\n" + " - ${newline}: insert a new line at point, so the option is " + "displayed on multiple lines\n" "\n" "Keys and input to move in on fset buffer:\n" " up move one line up\n" diff --git a/src/plugins/fset/fset-config.c b/src/plugins/fset/fset-config.c index ddfac2c8d..ca91e425c 100644 --- a/src/plugins/fset/fset-config.c +++ b/src/plugins/fset/fset-config.c @@ -51,8 +51,6 @@ struct t_config_option *fset_config_look_use_mute; /* fset config, format section */ struct t_config_option *fset_config_format_option[2]; -struct t_config_option *fset_config_format_option_marked[2]; -struct t_config_option *fset_config_format_option_selected[2]; struct t_config_option *fset_config_format_export_help; struct t_config_option *fset_config_format_export_option; struct t_config_option *fset_config_format_export_option_null; @@ -69,6 +67,8 @@ struct t_config_option *fset_config_color_help_name; struct t_config_option *fset_config_color_help_quotes; struct t_config_option *fset_config_color_help_values; struct t_config_option *fset_config_color_index[2]; +struct t_config_option *fset_config_color_line_marked_bg[2]; +struct t_config_option *fset_config_color_line_selected_bg[2]; struct t_config_option *fset_config_color_marked[2]; struct t_config_option *fset_config_color_max[2]; struct t_config_option *fset_config_color_min[2]; @@ -96,8 +96,7 @@ struct t_config_option *fset_config_color_value_undef[2]; char **fset_config_sort_fields = NULL; int fset_config_sort_fields_count = 0; -char *fset_config_eval_format_option_marked[2] = { NULL, NULL }; -char *fset_config_eval_format_option_selected[2] = { NULL, NULL }; +int fset_config_format_option_num_lines[2] = { 1, 1 }; /* @@ -113,7 +112,8 @@ fset_config_change_format_number_cb (const void *pointer, void *data, (void) data; (void) option; - fset_buffer_refresh (0); + fset_buffer_selected_line = 0; + fset_buffer_refresh (1); } /* @@ -214,6 +214,34 @@ fset_config_change_use_keys_cb (const void *pointer, void *data, } /* + * Counts the number of "substring" in "string". + * + * Returns the number of times substring is in string. + */ + +int +fset_config_count_substring (const char *string, + const char *substring) +{ + int count, length; + const char *pos; + + count = 0; + length = strlen (substring); + pos = string; + while (pos && pos[0]) + { + pos = strstr (pos, substring); + if (!pos) + break; + count++; + pos += length; + } + + return count; +} + +/* * Callback for changes on format options. */ @@ -222,7 +250,6 @@ fset_config_change_format_cb (const void *pointer, void *data, struct t_config_option *option) { int i; - const char *ptr_format; /* make C compiler happy */ (void) pointer; @@ -231,42 +258,12 @@ fset_config_change_format_cb (const void *pointer, void *data, for (i = 0; i < 2; i++) { - /* format_option_marked */ - if (fset_config_eval_format_option_marked[i]) - free (fset_config_eval_format_option_marked[i]); - ptr_format = weechat_config_string (fset_config_format_option_marked[i]); - if (ptr_format && ptr_format[0]) - { - fset_config_eval_format_option_marked[i] = weechat_string_replace ( - ptr_format, - "${format_option}", - weechat_config_string (fset_config_format_option[i])); - } - else - { - fset_config_eval_format_option_marked[i] = strdup ( - weechat_config_string (fset_config_format_option[i])); - } - - /* format_option_selected */ - if (fset_config_eval_format_option_selected[i]) - free (fset_config_eval_format_option_selected[i]); - ptr_format = weechat_config_string (fset_config_format_option_selected[i]); - if (ptr_format && ptr_format[0]) - { - fset_config_eval_format_option_selected[i] = weechat_string_replace ( - ptr_format, - "${format_option}", - weechat_config_string (fset_config_format_option[i])); - } - else - { - fset_config_eval_format_option_selected[i] = strdup ( - weechat_config_string (fset_config_format_option[i])); - } + fset_config_format_option_num_lines[i] = fset_config_count_substring ( + weechat_config_string (fset_config_format_option[i]), "${newline}") + 1; } - fset_buffer_refresh (0); + fset_buffer_selected_line = 0; + fset_buffer_refresh (1); } /* @@ -511,58 +508,6 @@ fset_config_init () NULL, NULL, NULL, &fset_config_change_format_cb, NULL, NULL, NULL, NULL, NULL); - fset_config_format_option_marked[0] = weechat_config_new_option ( - fset_config_file, ptr_section, - "option_marked1", "string", - N_("first format for a line with a marked option " - "(note: content is evaluated, see /help fset, " - "${format_option} is replaced by the content of option " - "fset.format.option1 before evaluation; if this option is " - "empty, the value of fset.format.option1 is used); " - "formats can be switched with key ctrl+X"), - NULL, 0, 0, "", NULL, 0, - NULL, NULL, NULL, - &fset_config_change_format_cb, NULL, NULL, - NULL, NULL, NULL); - fset_config_format_option_marked[1] = weechat_config_new_option ( - fset_config_file, ptr_section, - "option_marked2", "string", - N_("second format for a line with a marked option " - "(note: content is evaluated, see /help fset, " - "${format_option} is replaced by the content of option " - "fset.format.option2 before evaluation; if this option is " - "empty, the value of fset.format.option2 is used); " - "formats can be switched with key ctrl+X"), - NULL, 0, 0, "", NULL, 0, - NULL, NULL, NULL, - &fset_config_change_format_cb, NULL, NULL, - NULL, NULL, NULL); - fset_config_format_option_selected[0] = weechat_config_new_option ( - fset_config_file, ptr_section, - "option_selected1", "string", - N_("first format for the line with selected option " - "(note: content is evaluated, see /help fset, " - "${format_option} is replaced by the content of option " - "fset.format.option1 before evaluation; if this option is " - "empty, the value of fset.format.option1 is used); " - "formats can be switched with key ctrl+X"), - NULL, 0, 0, "${color:,blue}${format_option}", NULL, 0, - NULL, NULL, NULL, - &fset_config_change_format_cb, NULL, NULL, - NULL, NULL, NULL); - fset_config_format_option_selected[1] = weechat_config_new_option ( - fset_config_file, ptr_section, - "option_selected2", "string", - N_("second format for the line with selected option " - "(note: content is evaluated, see /help fset, " - "${format_option} is replaced by the content of option " - "fset.format.option2 before evaluation; if this option is " - "empty, the value of fset.format.option2 is used); " - "formats can be switched with key ctrl+X"), - NULL, 0, 0, "${color:,red}${format_option}", NULL, 0, - NULL, NULL, NULL, - &fset_config_change_format_cb, NULL, NULL, - NULL, NULL, NULL); fset_config_format_export_help = weechat_config_new_option ( fset_config_file, ptr_section, "export_help", "string", @@ -731,6 +676,42 @@ fset_config_init () NULL, NULL, NULL, &fset_config_change_color_cb, NULL, NULL, NULL, NULL, NULL); + fset_config_color_line_marked_bg[0] = weechat_config_new_option ( + fset_config_file, ptr_section, + "line_marked_bg1", "color", + N_("background color for a marked line " + "(used with the first format, see option fset.format.option1)"), + NULL, 0, 0, "default", NULL, 0, + NULL, NULL, NULL, + &fset_config_change_color_cb, NULL, NULL, + NULL, NULL, NULL); + fset_config_color_line_marked_bg[1] = weechat_config_new_option ( + fset_config_file, ptr_section, + "line_marked_bg2", "color", + N_("background color for a marked line " + "(used with the second format, see option fset.format.option2)"), + NULL, 0, 0, "default", NULL, 0, + NULL, NULL, NULL, + &fset_config_change_color_cb, NULL, NULL, + NULL, NULL, NULL); + fset_config_color_line_selected_bg[0] = weechat_config_new_option ( + fset_config_file, ptr_section, + "line_selected_bg1", "color", + N_("background color for the selected line " + "(used with the first format, see option fset.format.option1)"), + NULL, 0, 0, "blue", NULL, 0, + NULL, NULL, NULL, + &fset_config_change_color_cb, NULL, NULL, + NULL, NULL, NULL); + fset_config_color_line_selected_bg[1] = weechat_config_new_option ( + fset_config_file, ptr_section, + "line_selected_bg2", "color", + N_("background color for the selected line " + "(used with the second format, see option fset.format.option2)"), + NULL, 0, 0, "red", NULL, 0, + NULL, NULL, NULL, + &fset_config_change_color_cb, NULL, NULL, + NULL, NULL, NULL); fset_config_color_marked[0] = weechat_config_new_option ( fset_config_file, ptr_section, "marked", "color", @@ -1119,8 +1100,6 @@ fset_config_write () void fset_config_free () { - int i; - weechat_config_free (fset_config_file); if (fset_config_sort_fields) @@ -1129,18 +1108,4 @@ fset_config_free () fset_config_sort_fields = NULL; fset_config_sort_fields_count = 0; } - - for (i = 0; i < 2; i++) - { - if (fset_config_eval_format_option_marked[i]) - { - free (fset_config_eval_format_option_marked[i]); - fset_config_eval_format_option_marked[i] = NULL; - } - if (fset_config_eval_format_option_selected[i]) - { - free (fset_config_eval_format_option_selected[i]); - fset_config_eval_format_option_selected[i] = NULL; - } - } } diff --git a/src/plugins/fset/fset-config.h b/src/plugins/fset/fset-config.h index cb7d4c3b6..f53751017 100644 --- a/src/plugins/fset/fset-config.h +++ b/src/plugins/fset/fset-config.h @@ -39,8 +39,6 @@ extern struct t_config_option *fset_config_look_use_keys; extern struct t_config_option *fset_config_look_use_mute; extern struct t_config_option *fset_config_format_option[2]; -extern struct t_config_option *fset_config_format_option_marked[2]; -extern struct t_config_option *fset_config_format_option_selected[2]; extern struct t_config_option *fset_config_format_export_help; extern struct t_config_option *fset_config_format_export_option; extern struct t_config_option *fset_config_format_export_option_null; @@ -55,6 +53,8 @@ extern struct t_config_option *fset_config_color_help_name; extern struct t_config_option *fset_config_color_help_quotes; extern struct t_config_option *fset_config_color_help_values; extern struct t_config_option *fset_config_color_index[2]; +extern struct t_config_option *fset_config_color_line_marked_bg[2]; +extern struct t_config_option *fset_config_color_line_selected_bg[2]; extern struct t_config_option *fset_config_color_marked[2]; extern struct t_config_option *fset_config_color_max[2]; extern struct t_config_option *fset_config_color_min[2]; @@ -82,8 +82,7 @@ extern struct t_config_option *fset_config_color_value_undef[2]; extern char **fset_config_sort_fields; extern int fset_config_sort_fields_count; -extern char *fset_config_eval_format_option_marked[2]; -extern char *fset_config_eval_format_option_selected[2]; +extern int fset_config_format_option_num_lines[2]; extern int fset_config_init (); extern int fset_config_read (); diff --git a/src/plugins/fset/fset-option.c b/src/plugins/fset/fset-option.c index ea2695cf4..8bfd20a96 100644 --- a/src/plugins/fset/fset-option.c +++ b/src/plugins/fset/fset-option.c @@ -934,7 +934,7 @@ fset_option_get_arraylist_options () struct t_hashtable * fset_option_get_hashtable_max_length_field () { - return weechat_hashtable_new (32, + return weechat_hashtable_new (128, WEECHAT_HASHTABLE_STRING, WEECHAT_HASHTABLE_INTEGER, NULL, NULL); |