diff options
author | Sébastien Helleu <flashcode@flashtux.org> | 2017-06-15 22:03:01 +0200 |
---|---|---|
committer | Sébastien Helleu <flashcode@flashtux.org> | 2017-06-25 16:35:28 +0200 |
commit | f519499057790407bfdcbe568f1c4b5059edc732 (patch) | |
tree | b2c0b022153326260c6e0d3b8874d48f3f96e205 | |
parent | 28dcb1049bb8fdecbec6f2aadf09560077fae73e (diff) | |
download | weechat-f519499057790407bfdcbe568f1c4b5059edc732.zip |
fset: add export of options
-rw-r--r-- | src/plugins/fset/fset-buffer.c | 64 | ||||
-rw-r--r-- | src/plugins/fset/fset-command.c | 116 | ||||
-rw-r--r-- | src/plugins/fset/fset-config.c | 47 | ||||
-rw-r--r-- | src/plugins/fset/fset-config.h | 4 | ||||
-rw-r--r-- | src/plugins/fset/fset-option.c | 222 | ||||
-rw-r--r-- | src/plugins/fset/fset-option.h | 1 |
6 files changed, 383 insertions, 71 deletions
diff --git a/src/plugins/fset/fset-buffer.c b/src/plugins/fset/fset-buffer.c index 0070eb5b2..0fcf03c4e 100644 --- a/src/plugins/fset/fset-buffer.c +++ b/src/plugins/fset/fset-buffer.c @@ -545,6 +545,23 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "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)")); + 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)")); + weechat_hashtable_set (fset_buffer_hashtable_extra_vars, + "_description2", str_field); + fset_buffer_fills_field (str_field, sizeof (str_field), "description2", 64); + weechat_hashtable_set (fset_buffer_hashtable_extra_vars, + "description2", str_field); + /* description_en */ ptr_field = weechat_hdata_string (fset_hdata_fset_option, fset_option, "description"); @@ -557,10 +574,27 @@ fset_buffer_display_line (int y, struct t_fset_option *fset_option) (ptr_field) ? ptr_field : ""); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "_description_en", str_field); - fset_buffer_fills_field (str_field, sizeof (str_field), "description", 64); + fset_buffer_fills_field (str_field, sizeof (str_field), "description_en", 64); weechat_hashtable_set (fset_buffer_hashtable_extra_vars, "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)"); + 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)"); + weechat_hashtable_set (fset_buffer_hashtable_extra_vars, + "_description_en2", str_field); + fset_buffer_fills_field (str_field, sizeof (str_field), "description_en2", 64); + weechat_hashtable_set (fset_buffer_hashtable_extra_vars, + "description_en2", str_field); + /* string_values */ ptr_field = weechat_hdata_string (fset_hdata_fset_option, fset_option, "string_values"); @@ -862,6 +896,34 @@ fset_buffer_input_cb (const void *pointer, void *data, return WEECHAT_RC_OK; } + /* export options in a file */ + if (strncmp (input_data, "w:", 2) == 0) + { + if (input_data[2]) + { + fset_option_export ( + input_data + 2, + weechat_config_boolean (fset_config_look_export_help_default)); + } + return WEECHAT_RC_OK; + } + + /* export options in a file (without help) */ + if (strncmp (input_data, "w-:", 3) == 0) + { + if (input_data[3]) + fset_option_export (input_data + 3, 0); + return WEECHAT_RC_OK; + } + + /* export options in a file (with help) */ + if (strncmp (input_data, "w+:", 3) == 0) + { + if (input_data[3]) + fset_option_export (input_data + 3, 1); + return WEECHAT_RC_OK; + } + /* execute action on an option */ for (i = 0; actions[i][0]; i++) { diff --git a/src/plugins/fset/fset-command.c b/src/plugins/fset/fset-command.c index 5d709386e..e164e1cd0 100644 --- a/src/plugins/fset/fset-command.c +++ b/src/plugins/fset/fset-command.c @@ -81,8 +81,9 @@ fset_command_fset (const void *pointer, void *data, struct t_gui_buffer *buffer, int argc, char **argv, char **argv_eol) { - int num_options, line, value, i; + int num_options, line, value, i, with_help; char str_command[512]; + const char *ptr_filename; struct t_fset_option *ptr_fset_option; struct t_config_option *ptr_option; struct t_gui_window *ptr_window; @@ -91,7 +92,6 @@ fset_command_fset (const void *pointer, void *data, (void) pointer; (void) data; (void) buffer; - (void) argv_eol; if (argc == 1) { @@ -373,6 +373,40 @@ fset_command_fset (const void *pointer, void *data, return WEECHAT_RC_OK; } + if (weechat_strcasecmp (argv[1], "-export") == 0) + { + if (argc < 3) + WEECHAT_COMMAND_ERROR; + with_help = weechat_config_boolean (fset_config_look_export_help_default); + ptr_filename = argv_eol[2]; + if (weechat_strcasecmp (argv[2], "-help") == 0) + { + with_help = 1; + if (argc < 4) + WEECHAT_COMMAND_ERROR; + ptr_filename = argv_eol[3]; + } + else if (weechat_strcasecmp (argv[2], "-nohelp") == 0) + { + with_help = 0; + if (argc < 4) + WEECHAT_COMMAND_ERROR; + ptr_filename = argv_eol[3]; + } + num_options = weechat_arraylist_size (fset_options); + if (num_options == 0) + { + weechat_printf (NULL, + _("%s%s: there are no options displayed, " + "unable to export."), + weechat_prefix ("error"), FSET_PLUGIN_NAME); + return WEECHAT_RC_OK; + } + if (!fset_option_export (ptr_filename, with_help)) + WEECHAT_COMMAND_ERROR; + return WEECHAT_RC_OK; + } + WEECHAT_COMMAND_ERROR; } else @@ -539,6 +573,7 @@ fset_command_init () " || -set" " || -append" " || -mark [<number>]" + " || -export [-help|-nohelp] <filename>" " || filter"), N_(" -bar: add the help bar\n" " -refresh: refresh list of options, then whole screen " @@ -562,6 +597,12 @@ fset_command_init () "of option (move the cursor at the end of value)\n" " -mark: toggle mark on the option and move \"number\" lines " "(up/down, default is 1: one line down)\n" + " -export: export the options and values displayed in a file " + "(each line has format: \"/set name value\" or \"/unset name\")\n" + " -help: force writing of help on options in exported file " + "(see /help fset.look.export_help_default)\n" + " -nohelp: do not write help on options in exported file " + "(see /help fset.look.export_help_default)\n" " filter: set a new filter to see only matching options (this " "filter can be used as input in fset buffer as well); allowed " "formats are:\n" @@ -580,10 +621,11 @@ fset_command_init () " ==xxx show only options with exact value \"xxx\"\n" " c:xxx show only options matching the evaluated " "condition \"xxx\", using following variables: file, section, " - "option, name, parent_name, type (bool/int/str/col), " - "default_value, default_value_undef, value, value_undef, " - "value_changed, parent_value, min, max, description, " - "description_en, string_values\n" + "option, name, parent_name, type, type_en, type_short " + "(bool/int/str/col), type_tiny (b/i/s/c), default_value, " + "default_value_undef, value, quoted_value, value_undef, " + "value_changed, parent_value, min, max, description, description2, " + "description_en, description_en2, string_values\n" " s:x,y sort options by fields x,y " "(see /help fset.look.sort)\n" " s: reset sort to its default value " @@ -605,6 +647,8 @@ fset_command_init () " - ${parent_name}: parent option name\n" " - ${type}: option type (translated)\n" " - ${type_en}: option type (in English)\n" + " - ${type_short}: short option type (bool/int/str/col)\n" + " - ${type_tiny}: tiny option type (b/i/s/c)\n" " - ${default_value}: option default value\n" " - ${default_value_undef}: \"1\" if default value is null, " "otherwise \"0\"\n" @@ -617,7 +661,11 @@ fset_command_init () " - ${min}: min value\n" " - ${max}: max value\n" " - ${description}: option description (translated)\n" + " - ${description2}: option description (translated), " + "\"(no description)\" (translated) if there's no description\n" " - ${description_en}: option description (in English)\n" + " - ${description_en2}: option description (in English), " + "\"(no description)\" if there's no description\n" " - ${string_values}: string values allowed for set of an " "integer option using strings\n" " - ${marked}: \"1\" if option is marked, otherwise \"0\"\n" @@ -629,38 +677,41 @@ fset_command_init () "${__name}, ${__type}, ...\n" "\n" "Keys and input to move in on fset buffer:\n" - " up move one line up\n" - " down move one line down\n" - " pgup move one page up\n" - " pgdn move one page down\n" - " alt-home << move to first line\n" - " alt-end >> move to last line\n" - " F11 < scroll horizontally on the left\n" - " F12 > scroll horizontally on the right\n" + " up move one line up\n" + " down move one line down\n" + " pgup move one page up\n" + " pgdn move one page down\n" + " alt-home << move to first line\n" + " alt-end >> move to last line\n" + " F11 < scroll horizontally on the left\n" + " F12 > scroll horizontally on the right\n" "\n" "Keys and input to set options on fset buffer:\n" - " alt+space t toggle boolean value\n" - " alt+'-' - subtract 1 from value for integer/color, " + " alt+space t toggle boolean value\n" + " alt+'-' - subtract 1 from value for integer/color, " "set value for other types\n" - " alt+'+' + add 1 to value for integer/color, append " + " alt+'+' + add 1 to value for integer/color, append " "to value for other types\n" - " alt+f, alt+r r reset value\n" - " alt+f, alt+u u unset value\n" - " alt+enter s set value\n" - " alt+f, alt+a a append to value\n" - " alt+',' , mark/unmark option and move one line down\n" - " shift+down mark/unmark option and move one line down\n" - " shift+up mark/unmark option and move one line up\n" + " alt+f, alt+r r reset value\n" + " alt+f, alt+u u unset value\n" + " alt+enter s set value\n" + " alt+f, alt+a a append to value\n" + " alt+',' , mark/unmark option and move one line down\n" + " shift+down mark/unmark option and move one line down\n" + " shift+up mark/unmark option and move one line up\n" "\n" "Other keys and input on fset buffer:\n" - " ctrl+L refresh options and whole screen " + " ctrl+L refresh options and whole screen " "(command: /fset -refresh)\n" - " $ refresh options (keep marked options)\n" - " $$ refresh options (unmark all options)\n" - " p toggle plugin description options " + " $ refresh options (keep marked options)\n" + " $$ refresh options (unmark all options)\n" + " p toggle plugin description options " "(plugins.desc.*)\n" - " v toggle help bar\n" - " q close fset buffer\n" + " v toggle help bar\n" + " w:xxx export options in file \"xxx\"\n" + " w-:xxx export options in file \"xxx\" without help\n" + " w+:xxx export options in file \"xxx\" with help\n" + " q close fset buffer\n" "\n" "Mouse actions on fset buffer:\n" " wheel up/down move line up/down\n" @@ -681,8 +732,10 @@ fset_command_init () " /fset nicklist\n" " show all values which contain \"red\":\n" " /fset =red\n" + " show all values which are exactly \"red\":\n" + " /fset ==red\n" " show all integer options in irc plugin:\n" - " /fset c:${file} == irc && ${type} == int"), + " /fset c:${file} == irc && ${type_en} == integer"), "-bar" " || -refresh" " || -up 1|2|3|4|5" @@ -697,6 +750,7 @@ fset_command_init () " || -set" " || -append" " || -mark" + " || -export -help|-nohelp|%(filename) %(filename)" " || *|c:|f:|s:|d|d:|d=|d==|=|==", &fset_command_fset, NULL, NULL); weechat_hook_command_run ("/set", &fset_command_run_set_cb, NULL, NULL); diff --git a/src/plugins/fset/fset-config.c b/src/plugins/fset/fset-config.c index f1781e977..355de57b1 100644 --- a/src/plugins/fset/fset-config.c +++ b/src/plugins/fset/fset-config.c @@ -36,6 +36,7 @@ struct t_config_file *fset_config_file = NULL; struct t_config_option *fset_config_look_auto_unmark; struct t_config_option *fset_config_look_condition_catch_set; +struct t_config_option *fset_config_look_export_help_default; struct t_config_option *fset_config_look_marked_string; struct t_config_option *fset_config_look_scroll_horizontal; struct t_config_option *fset_config_look_show_help_bar; @@ -50,6 +51,9 @@ struct t_config_option *fset_config_look_use_mute; struct t_config_option *fset_config_format_option; struct t_config_option *fset_config_format_option_current; +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; /* fset config, color section */ @@ -315,6 +319,16 @@ fset_config_init () NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + fset_config_look_export_help_default = weechat_config_new_option ( + fset_config_file, ptr_section, + "export_help_default", "boolean", + N_("write help for each option exported by default (this can be " + "overridden with arguments \"-help\" and \"-nohelp\" for command " + "/fset -export"), + NULL, 0, 0, "on", NULL, 0, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL); fset_config_look_marked_string = weechat_config_new_option ( fset_config_file, ptr_section, "marked_string", "string", @@ -429,6 +443,39 @@ fset_config_init () 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", + N_("format of help line written before each option exported in a file " + "(note: content is evaluated, see /help fset)"), + NULL, 0, 0, + "# ${description2}", + NULL, 0, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL); + fset_config_format_export_option = weechat_config_new_option ( + fset_config_file, ptr_section, + "export_option", "string", + N_("format of each option exported in a file " + "(note: content is evaluated, see /help fset)"), + NULL, 0, 0, + "/set ${name} ${quoted_value}", + NULL, 0, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL); + fset_config_format_export_option_null = weechat_config_new_option ( + fset_config_file, ptr_section, + "export_option_null", "string", + N_("format of each option with \"null\" value exported in a file " + "(note: content is evaluated, see /help fset)"), + NULL, 0, 0, + "/unset ${name}", + NULL, 0, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL); /* color */ ptr_section = weechat_config_new_section (fset_config_file, "color", diff --git a/src/plugins/fset/fset-config.h b/src/plugins/fset/fset-config.h index 2f76bf098..3dc04a965 100644 --- a/src/plugins/fset/fset-config.h +++ b/src/plugins/fset/fset-config.h @@ -26,6 +26,7 @@ extern struct t_config_file *fset_config_file; extern struct t_config_option *fset_config_look_auto_unmark; extern struct t_config_option *fset_config_look_condition_catch_set; +extern struct t_config_option *fset_config_look_export_help_default; extern struct t_config_option *fset_config_look_marked_string; extern struct t_config_option *fset_config_look_scroll_horizontal; extern struct t_config_option *fset_config_look_show_help_bar; @@ -38,6 +39,9 @@ extern struct t_config_option *fset_config_look_use_mute; extern struct t_config_option *fset_config_format_option; extern struct t_config_option *fset_config_format_option_current; +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; extern struct t_config_option *fset_config_color_default_value[2]; extern struct t_config_option *fset_config_color_description[2]; diff --git a/src/plugins/fset/fset-option.c b/src/plugins/fset/fset-option.c index 59dc543a7..9b67b2173 100644 --- a/src/plugins/fset/fset-option.c +++ b/src/plugins/fset/fset-option.c @@ -22,6 +22,7 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> +#include <sys/stat.h> #include "../weechat-plugin.h" #include "fset.h" @@ -216,6 +217,85 @@ fset_option_string_match (const char *string, const char *mask) } /* + * Adds the properties of an fset option in a hashtable + * (keys and values must be strings). + */ + +void +fset_option_add_option_in_hashtable (struct t_hashtable *hashtable, + struct t_fset_option *fset_option) +{ + int length; + char *value; + + weechat_hashtable_set (hashtable, "file", fset_option->file); + weechat_hashtable_set (hashtable, "section", fset_option->section); + weechat_hashtable_set (hashtable, "option", fset_option->option); + weechat_hashtable_set (hashtable, "name", fset_option->name); + weechat_hashtable_set (hashtable, "parent_name", fset_option->parent_name); + weechat_hashtable_set (hashtable, + "type", _(fset_option_type_string[fset_option->type])); + weechat_hashtable_set (hashtable, + "type_en", fset_option_type_string[fset_option->type]); + weechat_hashtable_set (hashtable, + "type_short", fset_option_type_string_short[fset_option->type]); + weechat_hashtable_set (hashtable, + "type_tiny", fset_option_type_string_tiny[fset_option->type]); + weechat_hashtable_set (hashtable, + "default_value", fset_option->default_value); + weechat_hashtable_set (hashtable, "value", fset_option->value); + if (fset_option->value && (fset_option->type == FSET_OPTION_TYPE_STRING)) + { + length = 1 + strlen (fset_option->value) + 1 + 1; + value = malloc (length); + if (value) + { + snprintf (value, length, "\"%s\"", fset_option->value); + weechat_hashtable_set (hashtable, "quoted_value", value); + free (value); + } + else + { + weechat_hashtable_set (hashtable, + "quoted_value", fset_option->value); + } + } + else + { + weechat_hashtable_set (hashtable, "quoted_value", fset_option->value); + } + weechat_hashtable_set (hashtable, + "parent_value", fset_option->parent_value); + weechat_hashtable_set (hashtable, "min", fset_option->min); + weechat_hashtable_set (hashtable, "max", fset_option->max); + weechat_hashtable_set (hashtable, + "description", + (fset_option->description && fset_option->description[0]) ? + _(fset_option->description) : ""); + weechat_hashtable_set (hashtable, + "description2", + (fset_option->description && fset_option->description[0]) ? + _(fset_option->description) : _("(no description)")); + weechat_hashtable_set (hashtable, + "description_en", fset_option->description); + weechat_hashtable_set (hashtable, + "description_en2", + (fset_option->description && fset_option->description[0]) ? + fset_option->description : "(no description)"); + weechat_hashtable_set (hashtable, + "string_values", fset_option->string_values); + weechat_hashtable_set (hashtable, + "default_value_undef", + (fset_option->default_value == NULL) ? "1" : "0"); + weechat_hashtable_set (hashtable, + "value_undef", + (fset_option->value == NULL) ? "1" : "0"); + weechat_hashtable_set (hashtable, + "value_changed", + (fset_option_value_is_changed (fset_option)) ? "1" : "0"); +} + +/* * Checks if an option is matching current filter(s). * * Returns: @@ -243,44 +323,9 @@ fset_option_match_filters (struct t_fset_option *fset_option) { weechat_hashtable_set (fset_option_filter_hashtable_pointers, "fset_option", fset_option); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "file", fset_option->file); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "section", fset_option->section); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "option", fset_option->option); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "name", fset_option->name); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "parent_name", fset_option->parent_name); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "type", fset_option_type_string_short[fset_option->type]); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "default_value", fset_option->default_value); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "value", fset_option->value); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "parent_value", fset_option->parent_value); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "min", fset_option->min); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "max", fset_option->max); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "description", - (fset_option->description) ? _(fset_option->description) : ""); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "description_en", fset_option->description); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "string_values", fset_option->string_values); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "default_value_undef", - (fset_option->default_value == NULL) ? "1" : "0"); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "value_undef", - (fset_option->value == NULL) ? "1" : "0"); - weechat_hashtable_set (fset_option_filter_hashtable_extra_vars, - "value_changed", - (fset_option_value_is_changed (fset_option)) ? "1" : "0"); + fset_option_add_option_in_hashtable ( + fset_option_filter_hashtable_extra_vars, + fset_option); result = weechat_string_eval_expression ( fset_option_filter + 2, fset_option_filter_hashtable_pointers, @@ -649,9 +694,23 @@ fset_option_set_max_length_fields_option (struct t_fset_option *fset_option) (fset_option->description && fset_option->description[0]) ? _(fset_option->description) : "")); + /* description2 */ + fset_option_set_max_length_field ( + "description2", + weechat_strlen_screen ( + (fset_option->description && fset_option->description[0]) ? + _(fset_option->description) : _("(no description)"))); + /* description_en */ fset_option_set_max_length_field ( - "description", weechat_strlen_screen (fset_option->description)); + "description_en", weechat_strlen_screen (fset_option->description)); + + /* description_en2 */ + fset_option_set_max_length_field ( + "description_en2", + weechat_strlen_screen ( + (fset_option->description && fset_option->description[0]) ? + fset_option->description : "(no description)")); /* string_values */ fset_option_set_max_length_field ( @@ -1145,6 +1204,91 @@ fset_option_unmark_all () } /* + * Exports options currently displayed in fset buffer. + * + * If with_help == 1, the help is displayed above each option + * and options are separated by an empty line. + * + * Returns: + * 1: export OK + * 0: error + */ + +int +fset_option_export (const char *filename, int with_help) +{ + int num_options, i; + char *line; + FILE *file; + struct t_fset_option *ptr_fset_option; + struct t_hashtable *hashtable_pointers, *hashtable_extra_vars; + + file = fopen (filename, "w"); + if (!file) + return 0; + + chmod (filename, 0600); + + hashtable_pointers = weechat_hashtable_new ( + 8, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_POINTER, + NULL, NULL); + hashtable_extra_vars = weechat_hashtable_new ( + 128, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_STRING, + NULL, NULL); + + num_options = weechat_arraylist_size (fset_options); + for (i = 0; i < num_options; i++) + { + ptr_fset_option = weechat_arraylist_get (fset_options, i); + if (ptr_fset_option) + { + weechat_hashtable_set (hashtable_pointers, + "fset_option", ptr_fset_option); + fset_option_add_option_in_hashtable (hashtable_extra_vars, + ptr_fset_option); + if (with_help) + { + if (i > 0) + fprintf (file, "\n"); + line = weechat_string_eval_expression ( + weechat_config_string (fset_config_format_export_help), + hashtable_pointers, + hashtable_extra_vars, + NULL); + if (line && line[0]) + fprintf (file, "%s\n", line); + if (line) + free (line); + } + line = weechat_string_eval_expression ( + (ptr_fset_option->value) ? + weechat_config_string (fset_config_format_export_option) : + weechat_config_string (fset_config_format_export_option_null), + hashtable_pointers, + hashtable_extra_vars, + NULL); + if (line && line[0]) + fprintf (file, "%s\n", line); + if (line) + free (line); + } + } + + fclose (file); + + if (hashtable_pointers) + weechat_hashtable_free (hashtable_pointers); + if (hashtable_extra_vars) + weechat_hashtable_free (hashtable_extra_vars); + + return 1; +} + +/* * Refreshes the fset buffer after the change of an option. */ diff --git a/src/plugins/fset/fset-option.h b/src/plugins/fset/fset-option.h index 0e7364734..bf01b9f64 100644 --- a/src/plugins/fset/fset-option.h +++ b/src/plugins/fset/fset-option.h @@ -88,6 +88,7 @@ extern void fset_option_toggle_mark (struct t_fset_option *fset_option, struct t_config_option *option, int value); extern void fset_option_unmark_all (); +extern int fset_option_export (const char *filename, int with_help); extern int fset_option_config_cb (const void *pointer, void *data, const char *option, |