only sort by fuzzy match before usage, when match differs a lot

SVN revision: 48467
This commit is contained in:
Hannes Janetzek 2010-04-30 12:53:29 +00:00
parent a355fc0dfa
commit 586b7d6f64
3 changed files with 42 additions and 20 deletions

View File

@ -140,7 +140,7 @@ e_modapi_init(E_Module *m)
NULL, "preferences-extensions"); NULL, "preferences-extensions");
e_configure_registry_item_add("extensions/run_everything", 40, e_configure_registry_item_add("extensions/run_everything", 40,
_("Run Everything"), _("Everything Configuration"),
NULL, "system-run", NULL, "system-run",
evry_config_dialog); evry_config_dialog);
evry_init(); evry_init();

View File

@ -10,12 +10,6 @@ struct _Plugin
Evry_Selector *selector; Evry_Selector *selector;
}; };
/* inline static int
* _is_action(const Evry_Item *it)
* {
* return (it->plugin->name == action_selector);
* } */
static int static int
_cb_sort_recent(const void *data1, const void *data2) _cb_sort_recent(const void *data1, const void *data2)
{ {
@ -47,9 +41,18 @@ _cb_sort_recent(const void *data1, const void *data2)
return -1; return -1;
if (it2->usage && !it1->usage) if (it2->usage && !it1->usage)
return 1; return 1;
if (it1->plugin == it2->plugin) if ((it1->plugin == it2->plugin) &&
return (it1->priority - it2->priority); (it1->priority - it2->priority))
{
return (it1->priority - it2->priority);
}
else if (it1->plugin->config->priority -
it2->plugin->config->priority)
{
return (it1->plugin->config->priority -
it2->plugin->config->priority);
}
return strcmp(it1->label, it2->label); return strcmp(it1->label, it2->label);
@ -62,7 +65,6 @@ _cb_sort(const void *data1, const void *data2)
const Evry_Item *it1 = data1; const Evry_Item *it1 = data1;
const Evry_Item *it2 = data2; const Evry_Item *it2 = data2;
/* sort actions matching the subtype always before those matching type*/
if ((it1->type == EVRY_TYPE_ACTION) && if ((it1->type == EVRY_TYPE_ACTION) &&
(it2->type == EVRY_TYPE_ACTION)) (it2->type == EVRY_TYPE_ACTION))
{ {
@ -81,16 +83,24 @@ _cb_sort(const void *data1, const void *data2)
} }
} }
if (it1->fuzzy_match > 0 || it2->fuzzy_match > 0)
{
if (it2->fuzzy_match <= 0)
return -1;
if (it1->fuzzy_match <= 0)
return 1;
if (abs (it1->fuzzy_match - it2->fuzzy_match) > 5)
return (it1->fuzzy_match - it2->fuzzy_match);
}
if (it1->usage && it2->usage) if (it1->usage && it2->usage)
return (it1->usage > it2->usage ? -1 : 1); return (it1->usage > it2->usage ? -1 : 1);
if (it1->usage && !it2->usage) if (it1->usage && !it2->usage)
return -1; return -1;
if (it2->usage && !it1->usage) if (it2->usage && !it1->usage)
return 1; return 1;
if ((it1->plugin == it2->plugin) &&
(it1->priority - it2->priority))
return (it1->priority - it2->priority);
if (it1->fuzzy_match > 0 || it2->fuzzy_match > 0) if (it1->fuzzy_match > 0 || it2->fuzzy_match > 0)
{ {
@ -104,9 +114,18 @@ _cb_sort(const void *data1, const void *data2)
return (it1->fuzzy_match - it2->fuzzy_match); return (it1->fuzzy_match - it2->fuzzy_match);
} }
if (it1->plugin->config->priority - it2->plugin->config->priority) if ((it1->plugin == it2->plugin) &&
return (it1->plugin->config->priority - it2->plugin->config->priority); (it1->priority - it2->priority))
{
return (it1->priority - it2->priority);
}
else if (it1->plugin->config->priority -
it2->plugin->config->priority)
{
return (it1->plugin->config->priority -
it2->plugin->config->priority);
}
return strcasecmp(it1->label, it2->label); return strcasecmp(it1->label, it2->label);
} }

View File

@ -103,7 +103,8 @@ evry_fuzzy_match(const char *str, const char *match)
last = 0; last = 0;
min = 1; min = 1;
first = 0; first = 0;
/* m_len = 0; */
/* match current word of string against current match */ /* match current word of string against current match */
for (p = next; *next != 0; p++) for (p = next; *next != 0; p++)
{ {
@ -137,6 +138,8 @@ evry_fuzzy_match(const char *str, const char *match)
else else
offset += 3; offset += 3;
/* m_len++; */
if (offset <= m_len * 3) if (offset <= m_len * 3)
continue; continue;
} }
@ -208,7 +211,7 @@ evry_fuzzy_match(const char *str, const char *match)
if (sum > 0) if (sum > 0)
{ {
/* exact match ? */ /* exact match ? */
if (strlen(str) != m_len) if (strcmp(match, str))
sum += 10; sum += 10;
} }