[geany/geany] 65c34b: Improved search for the plugin manager
Jiří Techet
git-noreply at xxxxx
Fri Jun 5 16:44:04 UTC 2015
Branch: refs/heads/master
Author: Jiří Techet <techet at gmail.com>
Committer: Enrico Tröger <enrico.troeger at uvena.de>
Date: Fri, 05 Jun 2015 16:44:04 UTC
Commit: 65c34bd37e8d0102696a0ccbd8eeec04da34c862
https://github.com/geany/geany/commit/65c34bd37e8d0102696a0ccbd8eeec04da34c862
Log Message:
-----------
Improved search for the plugin manager
Search in name, description, author fields and show all results
which contain all the words from the search query.
Search plugins also by filename
Modified Paths:
--------------
src/plugins.c
Modified: src/plugins.c
33 lines changed, 24 insertions(+), 9 deletions(-)
===================================================================
@@ -1411,18 +1411,31 @@ static gboolean pm_tree_search(const gchar *key, const gchar *haystack)
gchar *normalized_key = NULL;
gchar *case_normalized_string = NULL;
gchar *case_normalized_key = NULL;
- gboolean matched = FALSE;
+ gboolean matched = TRUE;
normalized_string = g_utf8_normalize(haystack, -1, G_NORMALIZE_ALL);
normalized_key = g_utf8_normalize(key, -1, G_NORMALIZE_ALL);
if (normalized_string != NULL && normalized_key != NULL)
{
+ GString *stripped_key;
+ gchar **subkey, **subkeys;
+
case_normalized_string = g_utf8_casefold(normalized_string, -1);
case_normalized_key = g_utf8_casefold(normalized_key, -1);
- /* match not only start of plugin name but also any substring in the name */
- if (strstr(case_normalized_string, case_normalized_key) != NULL)
- matched = TRUE;
+ stripped_key = g_string_new(case_normalized_key);
+ do {} while (utils_string_replace_all(stripped_key, " ", " "));
+ subkeys = g_strsplit(stripped_key->str, " ", -1);
+ g_string_free(stripped_key, TRUE);
+ foreach_strv(subkey, subkeys)
+ {
+ if (strstr(case_normalized_string, *subkey) == NULL)
+ {
+ matched = FALSE;
+ break;
+ }
+ }
+ g_strfreev(subkeys);
}
g_free(normalized_key);
@@ -1439,15 +1452,17 @@ static gboolean pm_tree_filter_func(GtkTreeModel *model, GtkTreeIter *iter, gpoi
Plugin *plugin;
gboolean matched;
const gchar *key;
+ gchar *haystack, *filename;
gtk_tree_model_get(model, iter, PLUGIN_COLUMN_PLUGIN, &plugin, -1);
key = gtk_entry_get_text(GTK_ENTRY(pm_widgets.filter_entry));
- /* first search the plugin name */
- matched = pm_tree_search(key, plugin->info.name);
- /* if not found, extend search to plugin description */
- if (! matched)
- matched = pm_tree_search(key, plugin->info.description);
+ filename = g_path_get_basename(plugin->filename);
+ haystack = g_strjoin(" ", plugin->info.name, plugin->info.description,
+ plugin->info.author, filename, NULL);
+ matched = pm_tree_search(key, haystack);
+ g_free(haystack);
+ g_free(filename);
return matched;
}
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list