Branch: refs/heads/master Author: Nick Treleaven n@trelsoft.com Committer: Nick Treleaven n@trelsoft.com Date: Sat, 18 May 2019 12:51:55 UTC Commit: 41122c07bca2a45cd3750311398d42da404c85fa https://github.com/geany/geany/commit/41122c07bca2a45cd3750311398d42da404c85...
Log Message: ----------- Always allow user filetype extensions to override system config file
Before the user would sometimes have to override 'UnwantedFiletype=' in the user config file to remove an extension written in the system file. Geany would ignore an overridden filetype in the user config file that also matches the extension. This happened when the wanted filetype had a higher index than the unwanted one in filetypes_array.
Modified Paths: -------------- src/filetypes.c src/filetypesprivate.h
Modified: src/filetypes.c 17 lines changed, 16 insertions(+), 1 deletions(-) =================================================================== @@ -521,6 +521,7 @@ GeanyFiletype *filetypes_detect_from_extension(const gchar *utf8_filename) { gchar *base_filename; GeanyFiletype *ft; + guint i;
ft = detect_filetype_conf_file(utf8_filename); if (ft) @@ -533,14 +534,27 @@ GeanyFiletype *filetypes_detect_from_extension(const gchar *utf8_filename) SETPTR(base_filename, g_utf8_strdown(base_filename, -1)); #endif
- for (guint i = 0; i < filetypes_array->len; i++) + 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) ft = filetypes[GEANY_FILETYPES_NONE];
@@ -1386,6 +1400,7 @@ static void read_extensions(GKeyFile *sysconfig, GKeyFile *userconfig) gchar **list = g_key_file_get_string_list( (userset) ? userconfig : sysconfig, "Extensions", filetypes[i]->name, &len, NULL);
+ filetypes[i]->priv->user_extensions = userset; g_strfreev(filetypes[i]->pattern); /* Note: we allow 'Foo=' to remove all patterns */ if (!list)
Modified: src/filetypesprivate.h 1 lines changed, 1 insertions(+), 0 deletions(-) =================================================================== @@ -40,6 +40,7 @@ typedef struct GeanyFiletypePrivate gboolean xml_indent_tags; /* XML tag autoindentation, for HTML and XML filetypes */ GSList *tag_files; 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 */ GeanyBuildCommand *filecmds;
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).