diff options
Diffstat (limited to 'src/plugins/fset/fset-option.c')
-rw-r--r-- | src/plugins/fset/fset-option.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/plugins/fset/fset-option.c b/src/plugins/fset/fset-option.c index 2ef8c219d..a783d2f0e 100644 --- a/src/plugins/fset/fset-option.c +++ b/src/plugins/fset/fset-option.c @@ -1471,6 +1471,63 @@ fset_option_export (const char *filename, int with_help) } /* + * Imports options from a file: all lines starting with "/" are executed. + * + * Returns: + * 1: export OK + * 0: error + */ + +int +fset_option_import (const char *filename) +{ + char *filename2, line[4096], *ptr_line; + FILE *file; + int length; + + filename2 = weechat_string_expand_home (filename); + if (!filename2) + return 0; + + file = fopen (filename2, "r"); + if (!file) + { + free (filename2); + return 0; + } + + while (!feof (file)) + { + ptr_line = fgets (line, sizeof (line) - 1, file); + if (!ptr_line) + continue; + /* ignore comments */ + if (ptr_line[0] == '#') + continue; + /* execute command (if it's a valid command) */ + if (!weechat_string_input_for_buffer (ptr_line)) + { + /* remove trailing '\r' and '\n' */ + length = strlen (line) - 1; + while ((length >= 0) + && ((line[length] == '\n') + || (line[length] == '\r'))) + { + line[length] = '\0'; + length--; + } + weechat_command (NULL, ptr_line); + } + } + + fclose (file); + + free (filename2); + + return 1; +} + +/* * Refreshes the fset buffer after the change of an option. */ |