summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2017-06-15 22:03:01 +0200
committerSébastien Helleu <flashcode@flashtux.org>2017-06-25 16:35:28 +0200
commitf519499057790407bfdcbe568f1c4b5059edc732 (patch)
treeb2c0b022153326260c6e0d3b8874d48f3f96e205
parent28dcb1049bb8fdecbec6f2aadf09560077fae73e (diff)
downloadweechat-f519499057790407bfdcbe568f1c4b5059edc732.zip
fset: add export of options
-rw-r--r--src/plugins/fset/fset-buffer.c64
-rw-r--r--src/plugins/fset/fset-command.c116
-rw-r--r--src/plugins/fset/fset-config.c47
-rw-r--r--src/plugins/fset/fset-config.h4
-rw-r--r--src/plugins/fset/fset-option.c222
-rw-r--r--src/plugins/fset/fset-option.h1
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,