Merge pull request #2166 from ntrel/user-ft-ext
Always allow user filetype extensions to override system config file
This commit is contained in:
commit
770cda4064
@ -463,26 +463,8 @@ void filetypes_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Find a filetype that predicate returns TRUE for, otherwise return NULL. */
|
static gboolean match_basename(const GeanyFiletype *ft, const gchar *base_filename)
|
||||||
GeanyFiletype *filetypes_find(GCompareFunc predicate, gpointer user_data)
|
|
||||||
{
|
{
|
||||||
guint i;
|
|
||||||
|
|
||||||
for (i = 0; i < filetypes_array->len; i++)
|
|
||||||
{
|
|
||||||
GeanyFiletype *ft = filetypes[i];
|
|
||||||
|
|
||||||
if (predicate(ft, user_data))
|
|
||||||
return ft;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static gboolean match_basename(gconstpointer pft, gconstpointer user_data)
|
|
||||||
{
|
|
||||||
const GeanyFiletype *ft = pft;
|
|
||||||
const gchar *base_filename = user_data;
|
|
||||||
gint j;
|
gint j;
|
||||||
gboolean ret = FALSE;
|
gboolean ret = FALSE;
|
||||||
|
|
||||||
@ -505,7 +487,7 @@ static gboolean match_basename(gconstpointer pft, gconstpointer user_data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static GeanyFiletype *check_builtin_filenames(const gchar *utf8_filename)
|
static GeanyFiletype *detect_filetype_conf_file(const gchar *utf8_filename)
|
||||||
{
|
{
|
||||||
gchar *lfn = NULL;
|
gchar *lfn = NULL;
|
||||||
gchar *path;
|
gchar *path;
|
||||||
@ -539,8 +521,9 @@ GeanyFiletype *filetypes_detect_from_extension(const gchar *utf8_filename)
|
|||||||
{
|
{
|
||||||
gchar *base_filename;
|
gchar *base_filename;
|
||||||
GeanyFiletype *ft;
|
GeanyFiletype *ft;
|
||||||
|
guint i;
|
||||||
|
|
||||||
ft = check_builtin_filenames(utf8_filename);
|
ft = detect_filetype_conf_file(utf8_filename);
|
||||||
if (ft)
|
if (ft)
|
||||||
return ft;
|
return ft;
|
||||||
|
|
||||||
@ -551,7 +534,27 @@ GeanyFiletype *filetypes_detect_from_extension(const gchar *utf8_filename)
|
|||||||
SETPTR(base_filename, g_utf8_strdown(base_filename, -1));
|
SETPTR(base_filename, g_utf8_strdown(base_filename, -1));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ft = filetypes_find(match_basename, base_filename);
|
for (i = 0; i < filetypes_array->len; i++)
|
||||||
|
{
|
||||||
|
if (match_basename(filetypes[i], base_filename))
|
||||||
|
{
|
||||||
|
ft = filetypes[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// check if user config overrides found ft
|
||||||
|
if (ft && !ft->priv->user_extensions)
|
||||||
|
{
|
||||||
|
for (i++; i < filetypes_array->len; i++)
|
||||||
|
{
|
||||||
|
if (filetypes[i]->priv->user_extensions &&
|
||||||
|
match_basename(filetypes[i], base_filename))
|
||||||
|
{
|
||||||
|
ft = filetypes[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (ft == NULL)
|
if (ft == NULL)
|
||||||
ft = filetypes[GEANY_FILETYPES_NONE];
|
ft = filetypes[GEANY_FILETYPES_NONE];
|
||||||
|
|
||||||
@ -1397,6 +1400,7 @@ static void read_extensions(GKeyFile *sysconfig, GKeyFile *userconfig)
|
|||||||
gchar **list = g_key_file_get_string_list(
|
gchar **list = g_key_file_get_string_list(
|
||||||
(userset) ? userconfig : sysconfig, "Extensions", filetypes[i]->name, &len, NULL);
|
(userset) ? userconfig : sysconfig, "Extensions", filetypes[i]->name, &len, NULL);
|
||||||
|
|
||||||
|
filetypes[i]->priv->user_extensions = userset;
|
||||||
g_strfreev(filetypes[i]->pattern);
|
g_strfreev(filetypes[i]->pattern);
|
||||||
/* Note: we allow 'Foo=' to remove all patterns */
|
/* Note: we allow 'Foo=' to remove all patterns */
|
||||||
if (!list)
|
if (!list)
|
||||||
|
@ -196,9 +196,6 @@ extern GPtrArray *filetypes_array;
|
|||||||
extern GSList *filetypes_by_title;
|
extern GSList *filetypes_by_title;
|
||||||
|
|
||||||
|
|
||||||
GeanyFiletype *filetypes_find(GCompareFunc predicate, gpointer user_data);
|
|
||||||
|
|
||||||
|
|
||||||
void filetypes_init(void);
|
void filetypes_init(void);
|
||||||
|
|
||||||
void filetypes_init_types(void);
|
void filetypes_init_types(void);
|
||||||
|
@ -40,6 +40,7 @@ typedef struct GeanyFiletypePrivate
|
|||||||
gboolean xml_indent_tags; /* XML tag autoindentation, for HTML and XML filetypes */
|
gboolean xml_indent_tags; /* XML tag autoindentation, for HTML and XML filetypes */
|
||||||
GSList *tag_files;
|
GSList *tag_files;
|
||||||
gboolean warn_color_scheme;
|
gboolean warn_color_scheme;
|
||||||
|
gboolean user_extensions; // true if extensions were read from user config file
|
||||||
|
|
||||||
/* TODO: move to structure in build.h and only put a pointer here */
|
/* TODO: move to structure in build.h and only put a pointer here */
|
||||||
GeanyBuildCommand *filecmds;
|
GeanyBuildCommand *filecmds;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user