all repos — dmenu @ 86468aafe52a94ce6ba1a3601a587c65724a61aa

my build of dmenu

instant ^E
Connor Lane Smith cls@lubutu.com
Sat, 14 May 2011 18:39:27 +0100
commit

86468aafe52a94ce6ba1a3601a587c65724a61aa

parent

be9afce03548e8110744064d1c9c67795c13cdb6

1 files changed, 20 insertions(+), 16 deletions(-)

jump to
M dmenu.cdmenu.c

@@ -55,8 +55,8 @@ static Atom utf8;

static Bool topbar = True; static DC *dc; static Item *items = NULL; -static Item *matches, *sel; -static Item *prev, *curr, *next; +static Item *matches, *matchend; +static Item *prev, *curr, *next, *sel; static Window root, win; static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;

@@ -308,12 +308,15 @@ if(cursor < len) {

cursor = len; break; } - while(next) { - sel = curr = next; + if(next) { + curr = matchend; + calcoffsets(); + curr = prev; calcoffsets(); + while(next && (curr = curr->right)) + calcoffsets(); } - while(sel && sel->right) - sel = sel->right; + sel = matchend; break; case XK_Escape: exit(EXIT_FAILURE);

@@ -381,10 +384,10 @@

void match(void) { size_t len; - Item *item, *itemend, *lexact, *lprefix, *lsubstr, *exactend, *prefixend, *substrend; + Item *item, *lexact, *lprefix, *lsubstr, *exactend, *prefixend, *substrend; len = strlen(text); - matches = lexact = lprefix = lsubstr = itemend = exactend = prefixend = substrend = NULL; + matches = lexact = lprefix = lsubstr = matchend = exactend = prefixend = substrend = NULL; for(item = items; item && item->text; item++) if(!fstrncmp(text, item->text, len + 1)) appenditem(item, &lexact, &exactend);

@@ -395,24 +398,25 @@ appenditem(item, &lsubstr, &substrend);

if(lexact) { matches = lexact; - itemend = exactend; + matchend = exactend; } if(lprefix) { - if(itemend) { - itemend->right = lprefix; - lprefix->left = itemend; + if(matchend) { + matchend->right = lprefix; + lprefix->left = matchend; } else matches = lprefix; - itemend = prefixend; + matchend = prefixend; } if(lsubstr) { - if(itemend) { - itemend->right = lsubstr; - lsubstr->left = itemend; + if(matchend) { + matchend->right = lsubstr; + lsubstr->left = matchend; } else matches = lsubstr; + matchend = substrend; } curr = sel = matches; calcoffsets();