1
0
mirror of https://github.com/irssi/irssi.git synced 2024-11-03 04:27:19 -05:00

/SAVE -formats saves all the /formats to theme file.

git-svn-id: http://svn.irssi.org/repos/irssi/trunk@2319 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2002-01-18 16:23:57 +00:00 committed by cras
parent 103d668974
commit 9941ad52bf
2 changed files with 60 additions and 27 deletions

View File

@ -274,24 +274,32 @@ static void settings_save_confirm(const char *line, char *fname)
/* SYNTAX: SAVE [<file>] */ /* SYNTAX: SAVE [<file>] */
static void cmd_save(const char *data) static void cmd_save(const char *data)
{ {
char *format; GHashTable *optlist;
char *format, *fname;
void *free_arg;
if (*data == '\0') if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS,
data = mainconfig->fname; "save", &optlist, &fname))
if (!irssi_config_is_changed(data)) {
settings_save_fe(data);
return; return;
}
if (*fname == '\0')
fname = mainconfig->fname;
if (!irssi_config_is_changed(fname))
settings_save_fe(fname);
else {
/* config file modified outside irssi */
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
TXT_CONFIG_MODIFIED, data); TXT_CONFIG_MODIFIED, fname);
format = format_get_text(MODULE_NAME, NULL, NULL, NULL, format = format_get_text(MODULE_NAME, NULL, NULL, NULL,
TXT_OVERWRITE_CONFIG); TXT_OVERWRITE_CONFIG);
keyboard_entry_redirect((SIGNAL_FUNC) settings_save_confirm, keyboard_entry_redirect((SIGNAL_FUNC) settings_save_confirm,
format, 0, g_strdup(data)); format, 0, g_strdup(fname));
g_free(format); g_free(format);
}
cmd_params_free(free_arg);
} }
static void settings_clean_confirm(const char *line) static void settings_clean_confirm(const char *line)

View File

@ -1000,8 +1000,13 @@ static void cmd_format(const char *data)
cmd_params_free(free_arg); cmd_params_free(free_arg);
} }
typedef struct {
CONFIG_REC *config;
int save_all;
} THEME_SAVE_REC;
static void module_save(const char *module, MODULE_THEME_REC *rec, static void module_save(const char *module, MODULE_THEME_REC *rec,
CONFIG_REC *config) THEME_SAVE_REC *data)
{ {
CONFIG_NODE *fnode, *node; CONFIG_NODE *fnode, *node;
FORMAT_REC *formats; FORMAT_REC *formats;
@ -1010,27 +1015,33 @@ static void module_save(const char *module, MODULE_THEME_REC *rec,
formats = g_hash_table_lookup(default_formats, rec->name); formats = g_hash_table_lookup(default_formats, rec->name);
if (formats == NULL) return; if (formats == NULL) return;
fnode = config_node_traverse(config, "formats", TRUE); fnode = config_node_traverse(data->config, "formats", TRUE);
node = config_node_section(fnode, rec->name, NODE_TYPE_BLOCK); node = config_node_section(fnode, rec->name, NODE_TYPE_BLOCK);
for (n = 0; formats[n].def != NULL; n++) { for (n = 1; formats[n].def != NULL; n++) {
if (rec->formats[n] != NULL) { if (rec->formats[n] != NULL) {
config_node_set_str(config, node, formats[n].tag, config_node_set_str(data->config, node, formats[n].tag,
rec->formats[n]); rec->formats[n]);
} else if (data->save_all && formats[n].tag != NULL) {
config_node_set_str(data->config, node, formats[n].tag,
formats[n].def);
} }
} }
if (node->value == NULL) { if (node->value == NULL) {
/* not modified, don't keep the empty section */ /* not modified, don't keep the empty section */
config_node_remove(config, fnode, node); config_node_remove(data->config, fnode, node);
if (fnode->value == NULL) if (fnode->value == NULL) {
config_node_remove(config, config->mainnode, fnode); config_node_remove(data->config,
data->config->mainnode, fnode);
}
} }
} }
static void theme_save(THEME_REC *theme) static void theme_save(THEME_REC *theme, int save_all)
{ {
CONFIG_REC *config; CONFIG_REC *config;
THEME_SAVE_REC data;
char *path; char *path;
int ok; int ok;
@ -1050,7 +1061,9 @@ static void theme_save(THEME_REC *theme)
} }
} }
g_hash_table_foreach(theme->modules, (GHFunc) module_save, config); data.config = config;
data.save_all = save_all;
g_hash_table_foreach(theme->modules, (GHFunc) module_save, &data);
/* always save the theme to ~/.irssi/ */ /* always save the theme to ~/.irssi/ */
path = g_strdup_printf("%s/%s", get_irssi_dir(), path = g_strdup_printf("%s/%s", get_irssi_dir(),
@ -1065,16 +1078,27 @@ static void theme_save(THEME_REC *theme)
config_close(config); config_close(config);
} }
/* save changed formats */ /* save changed formats, -format saves all */
static void cmd_save(void) static void cmd_save(const char *data)
{ {
GSList *tmp; GSList *tmp;
GHashTable *optlist;
void *free_arg;
char *fname;
int saveall;
if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS,
"save", &optlist, &fname))
return;
saveall = g_hash_table_lookup(optlist, "formats") != NULL;
for (tmp = themes; tmp != NULL; tmp = tmp->next) { for (tmp = themes; tmp != NULL; tmp = tmp->next) {
THEME_REC *theme = tmp->data; THEME_REC *theme = tmp->data;
theme_save(theme); theme_save(theme, saveall);
} }
cmd_params_free(free_arg);
} }
static void complete_format_list(THEME_SEARCH_REC *rec, const char *key, GList **list) static void complete_format_list(THEME_SEARCH_REC *rec, const char *key, GList **list)
@ -1215,6 +1239,7 @@ void themes_init(void)
signal_add("setup reread", (SIGNAL_FUNC) themes_read); signal_add("setup reread", (SIGNAL_FUNC) themes_read);
command_set_options("format", "delete reset"); command_set_options("format", "delete reset");
command_set_options("save", "formats");
} }
void themes_deinit(void) void themes_deinit(void)