mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-22 20:36:50 +03:00
Ticket #380: About colors schemes (reopened ticket)
Original message: If invalid skin name is set via command line (or config file, or environment variable), then mc starts silently like -b -a mode. Two proposals, if required skin cannot be found: *. Show error message "Cannot find skin" *. Load the default.ini skin instead of set -a -c mode. Fix issue: Mc now more verbose if skin not found: {{{ _("Unable to load '%s' skin.\nDefault skin has been loaded") }}} or if skin not parse: {{{ _("Unable to parse '%s' skin.\nDefault skin has been loaded") }}} Translators: please, update your translates. Also, mc will try to load 'default' skin before switch to 'b&w' scheme. This commit adds ability to usage GError - glib error handling. Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
parent
4ea55c0b93
commit
197d5efa28
@ -15,7 +15,8 @@ AM_CPPFLAGS = -DDATADIR=\""$(pkgdatadir)/"\" -DLOCALEDIR=\""$(localedir)"\" \
|
|||||||
else
|
else
|
||||||
AM_CPPFLAGS = -DDATADIR=\""$(pkgdatadir)/"\" \
|
AM_CPPFLAGS = -DDATADIR=\""$(pkgdatadir)/"\" \
|
||||||
-DLOCALEDIR=\""$(localedir)"\" \
|
-DLOCALEDIR=\""$(localedir)"\" \
|
||||||
-DSYSCONFDIR=\""$(sysconfdir)/@PACKAGE@/"\"
|
-DSYSCONFDIR=\""$(sysconfdir)/@PACKAGE@/"\" \
|
||||||
|
-DPACKAGE=\""@PACKAGE@\"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
noinst_PROGRAMS = man2hlp
|
noinst_PROGRAMS = man2hlp
|
||||||
|
@ -149,4 +149,7 @@ void refresh_screen (void *);
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MC_ERROR mc_main_error_quark ()
|
||||||
|
GQuark mc_main_error_quark (void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
19
src/main.c
19
src/main.c
@ -294,6 +294,14 @@ char *mc_home_alt = NULL;
|
|||||||
|
|
||||||
char cmd_buf[512];
|
char cmd_buf[512];
|
||||||
|
|
||||||
|
/* Define this function for glib-style error handling */
|
||||||
|
GQuark
|
||||||
|
mc_main_error_quark (void)
|
||||||
|
{
|
||||||
|
return g_quark_from_static_string (PACKAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Save current stat of directories to avoid reloading the panels */
|
/* Save current stat of directories to avoid reloading the panels */
|
||||||
/* when no modifications have taken place */
|
/* when no modifications have taken place */
|
||||||
void
|
void
|
||||||
@ -1903,6 +1911,8 @@ main (int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
struct stat s;
|
struct stat s;
|
||||||
char *mc_dir;
|
char *mc_dir;
|
||||||
|
GError *error = NULL;
|
||||||
|
gboolean isInitialized;
|
||||||
|
|
||||||
/* We had LC_CTYPE before, LC_ALL includs LC_TYPE as well */
|
/* We had LC_CTYPE before, LC_ALL includs LC_TYPE as well */
|
||||||
setlocale (LC_ALL, "");
|
setlocale (LC_ALL, "");
|
||||||
@ -1961,11 +1971,18 @@ main (int argc, char *argv[])
|
|||||||
|
|
||||||
tty_init_colors (mc_args__disable_colors, mc_args__force_colors);
|
tty_init_colors (mc_args__disable_colors, mc_args__force_colors);
|
||||||
|
|
||||||
mc_skin_init();
|
isInitialized = mc_skin_init(&error);
|
||||||
|
|
||||||
mc_filehighlight = mc_fhl_new (TRUE);
|
mc_filehighlight = mc_fhl_new (TRUE);
|
||||||
|
|
||||||
dlg_set_default_colors ();
|
dlg_set_default_colors ();
|
||||||
|
|
||||||
|
if ( ! isInitialized ) {
|
||||||
|
message (D_ERROR, _("Warning"), error->message);
|
||||||
|
g_error_free(error);
|
||||||
|
error = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* create home directory */
|
/* create home directory */
|
||||||
/* do it after the screen library initialization to show the error message */
|
/* do it after the screen library initialization to show the error message */
|
||||||
mc_dir = concat_dir_and_file (home_dir, MC_BASE);
|
mc_dir = concat_dir_and_file (home_dir, MC_BASE);
|
||||||
|
@ -98,31 +98,60 @@ mc_skin_reinit (void)
|
|||||||
mc_skin_hash_destroy_value);
|
mc_skin_hash_destroy_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
|
||||||
/*** public functions ****************************************************************************/
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void
|
static void
|
||||||
mc_skin_init (void)
|
mc_skin_try_to_load_default (void)
|
||||||
{
|
{
|
||||||
mc_skin__default.name = mc_skin_get_default_name ();
|
mc_skin_reinit ();
|
||||||
mc_skin__default.colors = g_hash_table_new_full (g_str_hash, g_str_equal,
|
g_free (mc_skin__default.name);
|
||||||
mc_skin_hash_destroy_key,
|
mc_skin__default.name = g_strdup ("default");
|
||||||
mc_skin_hash_destroy_value);
|
|
||||||
|
|
||||||
if (!mc_skin_ini_file_load (&mc_skin__default)) {
|
if (!mc_skin_ini_file_load (&mc_skin__default)) {
|
||||||
mc_skin_reinit ();
|
mc_skin_reinit ();
|
||||||
mc_skin_set_hardcoded_skin (&mc_skin__default);
|
mc_skin_set_hardcoded_skin (&mc_skin__default);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
/*** public functions ****************************************************************************/
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
mc_skin_init (GError ** error)
|
||||||
|
{
|
||||||
|
|
||||||
|
mc_skin__default.name = mc_skin_get_default_name ();
|
||||||
|
|
||||||
|
mc_skin__default.colors = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
|
mc_skin_hash_destroy_key,
|
||||||
|
mc_skin_hash_destroy_value);
|
||||||
|
|
||||||
|
gboolean is_good_init = TRUE;
|
||||||
|
|
||||||
|
if (!mc_skin_ini_file_load (&mc_skin__default)) {
|
||||||
|
*error = g_error_new (MC_ERROR, 0,
|
||||||
|
_("Unable to load '%s' skin.\nDefault skin has been loaded"),
|
||||||
|
mc_skin__default.name);
|
||||||
|
|
||||||
|
mc_skin_try_to_load_default ();
|
||||||
|
is_good_init = FALSE;
|
||||||
|
}
|
||||||
mc_skin_colors_old_configure (&mc_skin__default);
|
mc_skin_colors_old_configure (&mc_skin__default);
|
||||||
|
|
||||||
if (!mc_skin_ini_file_parse (&mc_skin__default)) {
|
if (!mc_skin_ini_file_parse (&mc_skin__default)) {
|
||||||
mc_skin_reinit ();
|
if (*error == NULL)
|
||||||
mc_skin_set_hardcoded_skin (&mc_skin__default);
|
*error = g_error_new (MC_ERROR, 0,
|
||||||
|
_("Unable to parse '%s' skin.\nDefault skin has been loaded"),
|
||||||
|
mc_skin__default.name);
|
||||||
|
|
||||||
|
mc_skin_try_to_load_default ();
|
||||||
mc_skin_colors_old_configure (&mc_skin__default);
|
mc_skin_colors_old_configure (&mc_skin__default);
|
||||||
(void) mc_skin_ini_file_parse (&mc_skin__default);
|
(void) mc_skin_ini_file_parse (&mc_skin__default);
|
||||||
|
is_good_init = FALSE;
|
||||||
}
|
}
|
||||||
mc_skin_is_init = TRUE;
|
mc_skin_is_init = TRUE;
|
||||||
|
return is_good_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
@ -85,7 +85,7 @@ extern mc_skin_t mc_skin__default;
|
|||||||
|
|
||||||
/*** declarations of public functions ************************************************************/
|
/*** declarations of public functions ************************************************************/
|
||||||
|
|
||||||
void mc_skin_init (void);
|
gboolean mc_skin_init (GError **);
|
||||||
void mc_skin_deinit (void);
|
void mc_skin_deinit (void);
|
||||||
|
|
||||||
int mc_skin_color_get (const gchar *, const gchar *);
|
int mc_skin_color_get (const gchar *, const gchar *);
|
||||||
|
Loading…
Reference in New Issue
Block a user