mirror of
https://github.com/weechat/weechat.git
synced 2026-06-28 05:46:38 +02:00
fset: add option -import in command /fset
This commit is contained in:
@@ -423,6 +423,15 @@ fset_command_fset (const void *pointer, void *data,
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
if (weechat_strcmp (argv[1], "-import") == 0)
|
||||
{
|
||||
if (argc < 3)
|
||||
WEECHAT_COMMAND_ERROR;
|
||||
if (!fset_option_import (argv_eol[2]))
|
||||
WEECHAT_COMMAND_ERROR;
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
WEECHAT_COMMAND_ERROR;
|
||||
}
|
||||
else
|
||||
@@ -639,6 +648,7 @@ fset_command_init ()
|
||||
" || -mark"
|
||||
" || -format"
|
||||
" || -export [-help|-nohelp] <filename>"
|
||||
" || -import <filename>"
|
||||
" || <filter>"),
|
||||
WEECHAT_CMD_ARGS_DESC(
|
||||
N_("raw[-bar]: add the help bar"),
|
||||
@@ -666,6 +676,8 @@ fset_command_init ()
|
||||
N_("raw[-format]: switch to the next available format"),
|
||||
N_("raw[-export]: export the options and values displayed in a file "
|
||||
"(each line has format: \"/set name value\" or \"/unset name\")"),
|
||||
N_("raw[-import]: import the options from a file "
|
||||
"(all lines containing commands are are executed)"),
|
||||
N_("raw[-help]: force writing of help on options in exported file "
|
||||
"(see /help fset.look.export_help_default)"),
|
||||
N_("raw[-nohelp]: do not write help on options in exported file "
|
||||
@@ -784,6 +796,7 @@ fset_command_init ()
|
||||
" || -mark"
|
||||
" || -format"
|
||||
" || -export -help|-nohelp|%(filename) %(filename)"
|
||||
" || -import %(filename)"
|
||||
" || *|c:|f:|s:|d|d:|d=|d==|=|==|%(fset_options)",
|
||||
&fset_command_fset, NULL, NULL);
|
||||
weechat_hook_command_run ("/set", &fset_command_run_set_cb, NULL, NULL);
|
||||
|
||||
@@ -1470,6 +1470,63 @@ fset_option_export (const char *filename, int with_help)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@@ -121,6 +121,7 @@ extern void fset_option_mark_options_matching_filter (const char *filter,
|
||||
int mark);
|
||||
extern void fset_option_unmark_all ();
|
||||
extern int fset_option_export (const char *filename, int with_help);
|
||||
extern int fset_option_import (const char *filename);
|
||||
extern int fset_option_config_cb (const void *pointer,
|
||||
void *data,
|
||||
const char *option,
|
||||
|
||||
Reference in New Issue
Block a user