summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dmenu.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/dmenu.c b/dmenu.c
index 68fc9ff..b6f1ef2 100644
--- a/dmenu.c
+++ b/dmenu.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 @@ keypress(XKeyEvent *ev) {
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 @@ keypress(XKeyEvent *ev) {
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 @@ match(void) {
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();
/> Connor Lane Smith 1-23/+34 2011-09-19change version to 'hg'Gravatar Connor Lane Smith 1-1/+1 2011-07-24dmenu_run: sh -cGravatar Connor Lane Smith 1-1/+1 2011-07-22fix loadfontGravatar Connor Lane Smith 1-12/+13 2011-07-19Added tag 4.4 for changeset 2b105eaae831Gravatar Connor Lane Smith 1-0/+1 2011-07-19add lsx.1 to distGravatar Connor Lane Smith 1-1/+1 2011-07-17tweaksGravatar Connor Lane Smith 2-2/+2 2011-07-14efficiency tweaksGravatar Connor Lane Smith 2-60/+44 2011-07-14fix extra warningGravatar Connor Lane Smith 1-1/+1 2011-07-06simpler vlineGravatar Connor Lane Smith 1-4/+2 2011-07-04rebind ^N ^PGravatar Connor Lane Smith 2-3/+3 2011-06-25include limits.hGravatar Connor Lane Smith 1-0/+1 2011-06-23make clean lsxGravatar Connor Lane Smith 1-1/+1 2011-06-23lsx: check snprintfGravatar Connor Lane Smith 1-4/+3 2011-06-18update draw.cGravatar Connor Lane Smith 2-14/+14 2011-06-18simpler lsxGravatar Connor Lane Smith 3-11/+6 2011-06-13new dmenu_runGravatar Connor Lane Smith 5-26/+15 td>2015-09-28Remove function prototypes and reorder functions accordinglyGravatar FRIGN 1-80/+64 2015-09-28Untypedef struct itemGravatar FRIGN 1-10/+9 Adds clarity. Typedefs for structs are definitely a discussion matter, but there's no reason to hide a simple data-structure behind a meaningless typedef. 2015-09-28Fix the conversion from microseconds to nanosecondsGravatar Quentin Rameau 1-1/+1 2015-09-28Replace deprecated usleep() with nanosleep()Gravatar Quentin Rameau 1-2/+3 2015-09-28config.mk: use -std=c99Gravatar Hiltjo Posthuma 1-1/+1 2015-09-27dmenu: style improvementsGravatar Hiltjo Posthuma 1-204/+213 - move main to bottom, usage above main. - dont use variable names with function prototypes. - space before if, for, while, etc: 'if(' -> 'if ('. this makes the code-style more consistent 2015-09-27drw style improvementsGravatar Hiltjo Posthuma 2-93/+106 this makes the code-style more consistent aswell. 2015-09-27separate program-specific c99 bool and X11Gravatar Hiltjo Posthuma 2-11/+10 True, False are X11-specific, make sure to use c99 stdbool for program-specific things. ... also remove left-over vim mode string in config. 2015-09-27config.mk: fix _XOPEN_SOURCE=700 for getline()Gravatar Hiltjo Posthuma 1-1/+1 2015-09-27config.mk: improve feature test checkGravatar Hiltjo Posthuma 1-1/+1 this fixes a crash on NetBSD because it requires -D_XOPEN_SOURCE (strdup, usleep). thanks k0ga and stateless for reporting and fixing this issue! 2015-08-06Fixed typo introduced by shared codeGravatar Eric Pruitt 1-1/+1 2015-07-19stest: get rid of getopt, use suckless arg.hGravatar Hiltjo Posthuma 3-53/+141 ... also some style improvements. 2015-07-19config.mk: add FREETYPELIBS and FREETYPEINCGravatar Hiltjo Posthuma 1-3/+9 These variables make it simpler to change the paths to this for ports. `pkg-config` is avoided because it sucks, in particular for cross-compilation. A commented path for *BSD is added, the Xft includes are located at: /usr/X11R6/include there. Also already bump the version number to 4.6, a release will come approximately in August. 2015-07-19fix prompt color style how it used to beGravatar Hiltjo Posthuma 1-1/+1 This is the style how it was before the big Xft change. The colors were inverted, this was not the case before the change. Reported by "zvz" on #suckless IRC, thanks! 2015-06-27Use libdraw: add Xft and fallback-fonts support to graphics libGravatar Hiltjo Posthuma 11-316/+684 - libdraw, util: add drw.{c,h}, util.{c,h} and update code. - libdraw: fix drw_rect(): use w and h parameter. - libdraw: print errstr if last character in string was ":" (sbase). - libdraw: drw_clr_free() allow valid free(NULL). - config.def.h: set default font to monospace. - cleanup() on exit. - LICENSE: update license string for dmenu -v to 2015. - LICENSE: add myself to LICENSE 2014-09-17applied Hiltjo's patch as suggested on the ml to fix ControlMask for C-j and C-mGravatar Anselm R Garbe 2-2/+5 2014-07-30fix crash with ctrl-enter as inputGravatar Hiltjo Posthuma 1-1/+2 reproduce: ./dmenu; send EOF; press ctrl+enter. 2014-05-29updated copyright notices in LICENSE and dmenu.c fileGravatar Anselm R Garbe 2-2/+2 2013-08-13applied Martin Kühl's inverse matching flag to stestGravatar Anselm R Garbe 2-4/+7 2013-08-02applied Martti Kühne's dmenu monitor patchGravatar Anselm R Garbe 3-4/+14 https://gist.github.com/mar77i/3349298/raw/f6581ca96627f4c71c0bd1faf531daaf2a613b95/monarg.patch becomes upstream now 2013-06-28accepted vi'is exit approach ^[ (suggested by Arkaduisz)Gravatar Anselm R Garbe 1-0/+2