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");
e_configure_registry_item_add("extensions/run_everything", 40,
_("Run Everything"),
_("Everything Configuration"),
NULL, "system-run",
evry_config_dialog);
evry_init();

View File

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

View File

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