Exemple #1
0
int
load_primary_color_scheme(const char name[])
{
	col_scheme_t prev_cs;
	char full[PATH_MAX];

	if(!color_scheme_exists(name))
	{
		show_error_msgf("Color Scheme", "Invalid color scheme name: \"%s\"", name);
		return 0;
	}

	prev_cs = cfg.cs;
	curr_stats.cs_base = DCOLOR_BASE;
	curr_stats.cs = &cfg.cs;
	cfg.cs.state = CSS_LOADING;

	snprintf(full, sizeof(full), "%s/colors/%s", cfg.config_dir, name);
	if(source_file(full) != 0)
	{
		restore_primary_color_scheme(&prev_cs);
		show_error_msgf("Color Scheme Sourcing",
				"Errors loading colors cheme: \"%s\"", name);
		cfg.cs.state = CSS_NORMAL;
		return 0;
	}
	copy_str(cfg.cs.name, sizeof(cfg.cs.name), name);
	check_color_scheme(&cfg.cs);

	update_attributes();

	if(curr_stats.load_stage >= 2 && cfg.cs.state == CSS_DEFAULTED)
	{
		restore_primary_color_scheme(&prev_cs);
		show_error_msg("Color Scheme Error", "Not supported by the terminal");
		return 0;
	}

	cfg.cs.state = CSS_NORMAL;
	return 0;
}
int
load_primary_color_scheme(const char name[])
{
	col_scheme_t prev_cs = {};

	if(!color_scheme_exists(name))
	{
		show_error_msgf("Color Scheme", "Invalid color scheme name: \"%s\"", name);
		return 0;
	}

	assign_color_scheme(&prev_cs, &cfg.cs);
	curr_stats.cs = &cfg.cs;
	cfg.cs.state = CSS_LOADING;

	if(source_cs(name) != 0)
	{
		restore_primary_color_scheme(&prev_cs);
		show_error_msgf("Color Scheme Sourcing",
				"An error occurred on loading color scheme: \"%s\"", name);
		cfg.cs.state = CSS_NORMAL;
		return 0;
	}
	copy_str(cfg.cs.name, sizeof(cfg.cs.name), name);
	check_color_scheme(&cfg.cs);

	update_attributes();

	if(cfg.cs.state == CSS_DEFAULTED)
	{
		restore_primary_color_scheme(&prev_cs);
		show_error_msgf("Color Scheme Error",
				"\"%s\" color scheme is not supported by the terminal, restored \"%s\"",
				name, prev_cs.name);
		return 0;
	}

	free_color_scheme_highlights(&prev_cs);
	cfg.cs.state = CSS_NORMAL;
	return 0;
}