tapplied Michał Janeczek dmenu patch, made dmenu match case-insensitive by default, added -i command line option to enable ido matching, added Michał to Copyright holders - dmenu - Dmenu fork with xft fonts.
 (HTM) git clone git://r-36.net/dmenu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 724fe3cf7fc456db96bf10c2caeb7c307e529d73
 (DIR) parent 70cb32b021848255907ac0a4e3341f81f1d2ae24
 (HTM) Author: Anselm R. Garbe <garbeam@gmail.com>
       Date:   Sun, 23 Sep 2007 18:26:41 +0200
       
       applied Michał Janeczek dmenu patch, made dmenu match case-insensitive by default, added -i command line option to enable ido matching, added Michał to Copyright holders
       Diffstat:
         LICENSE                             |       1 +
         config.mk                           |       2 +-
         dmenu.1                             |       4 ++++
         dmenu.c                             |      79 +++++++++++++++----------------
       
       4 files changed, 45 insertions(+), 41 deletions(-)
       ---
 (DIR) diff --git a/LICENSE b/LICENSE
       t@@ -2,6 +2,7 @@ MIT/X Consortium License
        
        © 2006-2007 Anselm R. Garbe <garbeam at gmail dot com>
        © 2006-2007 Sander van Dijk <a dot h dot vandijk at gmail dot com>
       +© 2006-2007 Michał Janeczek <janeczek at gmail dot com>
        
        Permission is hereby granted, free of charge, to any person obtaining a
        copy of this software and associated documentation files (the "Software"),
 (DIR) diff --git a/config.mk b/config.mk
       t@@ -1,5 +1,5 @@
        # dmenu version
       -VERSION = 3.3
       +VERSION = 3.4
        
        # Customize below to fit your system
        
 (DIR) diff --git a/dmenu.1 b/dmenu.1
       t@@ -4,6 +4,7 @@ dmenu \- dynamic menu
        .SH SYNOPSIS
        .B dmenu
        .RB [ \-b ]
       +.RB [ \-i ]
        .RB [ \-fn " <font>"]
        .RB [ \-nb " <color>"]
        .RB [ \-nf " <color>"]
       t@@ -22,6 +23,9 @@ efficiently.
        .B \-b
        makes dmenu appear at the screen bottom (by default it appears at the screen top).
        .TP
       +.B \-i
       +makes dmenu match menu entries with ignoring intermediate characters.
       +.TP
        .B \-fn <font>
        defines the font.
        .TP
 (DIR) diff --git a/dmenu.c b/dmenu.c
       t@@ -37,9 +37,11 @@ struct Item {
                Item *next;                /* traverses all items */
                Item *left, *right;        /* traverses items matching current search pattern */
                char *text;
       +        Bool matched;
        };
        
        /* forward declarations */
       +Item *appenditem(Item *i, Item *last);
        void calcoffsets(void);
        void cleanup(void);
        void drawmenu(void);
       t@@ -55,7 +57,7 @@ void match(char *pattern);
        void readstdin(void);
        void run(void);
        void setup(Bool bottom);
       -int strido(const char *text, const char *pattern);
       +int strcaseido(const char *text, const char *pattern);
        unsigned int textnw(const char *text, unsigned int len);
        unsigned int textw(const char *text);
        
       t@@ -77,6 +79,7 @@ unsigned int mw, mh;
        unsigned int promptw = 0;
        unsigned int nitem = 0;
        unsigned int numlockmask = 0;
       +Bool idomatch = False;
        Bool running = True;
        Display *dpy;
        DC dc = {0};
       t@@ -88,6 +91,20 @@ Item *prev = NULL;
        Item *curr = NULL;
        Window root, win;
        
       +Item *
       +appenditem(Item *i, Item *last) {
       +        if(!last)
       +                item = i;
       +        else
       +                last->right = i;
       +        i->matched = True;
       +        i->left = last;
       +        i->right = NULL;
       +        last = i;
       +        nitem++;
       +        return last;
       +}
       +
        void
        calcoffsets(void) {
                unsigned int tw, w;
       t@@ -489,41 +506,21 @@ match(char *pattern) {
                item = j = NULL;
                nitem = 0;
                for(i = allitems; i; i=i->next)
       -                if(!plen || !strncmp(pattern, i->text, plen)) {
       -                        if(!j)
       -                                item = i;
       -                        else
       -                                j->right = i;
       -                        i->left = j;
       -                        i->right = NULL;
       -                        j = i;
       -                        nitem++;
       -                }
       -        for(i = allitems; i; i=i->next)
       -                if(plen && strncmp(pattern, i->text, plen)
       -                                && strstr(i->text, pattern)) {
       -                        if(!j)                               
       -                                item = i;                              
       -                        else                                     
       -                                j->right = i;                          
       -                        i->left = j;      
       -                        i->right = NULL;                         
       -                        j = i;                                      
       -                        nitem++;                                       
       -                }                                              
       -        for(i = allitems; i; i=i->next)                            
       -                if(plen && strncmp(pattern, i->text, plen)             
       -                                && !strstr(i->text, pattern)          
       -                                && strido(i->text,pattern)) { 
       -                        if(!j)
       -                                item = i;
       -                        else
       -                                j->right = i;
       -                        i->left = j;
       -                        i->right = NULL;
       -                        j = i;
       -                        nitem++;
       -                }
       +                i->matched = False;
       +
       +        for(i = allitems; i; i = i->next)
       +                if(!i->matched && !strncasecmp(pattern, i->text, plen))
       +                        j = appenditem(i,j);
       +
       +        for (i = allitems; i; i = i->next)
       +                if(!i->matched && strcasestr(i->text, pattern))
       +                        j = appenditem(i, j);
       +
       +        if(idomatch)
       +                for (i = allitems; i; i = i->next)
       +                        if(!i->matched && strcaseido(i->text, pattern))
       +                                j = appenditem(i, j);
       +
                curr = prev = next = sel = item;
                calcoffsets();
        }
       t@@ -629,9 +626,9 @@ setup(Bool bottom) {
        }
        
        int
       -strido(const char *text, const char *pattern) {
       +strcaseido(const char *text, const char *pattern) {
                for(; *text && *pattern; text++)
       -                if (*text == *pattern)
       +                if (tolower(*text) == tolower(*pattern))
                                pattern++;
                return !*pattern;
        }                                  
       t@@ -662,6 +659,8 @@ main(int argc, char *argv[]) {
                        if(!strcmp(argv[i], "-b")) {
                                bottom = True;
                        }
       +                else if(!strcmp(argv[i], "-i"))
       +                        idomatch = True;
                        else if(!strcmp(argv[i], "-fn")) {
                                if(++i < argc) font = argv[i];
                        }
       t@@ -681,9 +680,9 @@ main(int argc, char *argv[]) {
                                if(++i < argc) selfg = argv[i];
                        }
                        else if(!strcmp(argv[i], "-v"))
       -                        eprint("dmenu-"VERSION", © 2006-2007 Anselm R. Garbe, Sander van Dijk\n");
       +                        eprint("dmenu-"VERSION", © 2006-2007 Anselm R. Garbe, Sander van Dijk, Michał Janeczek\n");
                        else
       -                        eprint("usage: dmenu [-b] [-fn <font>] [-nb <color>] [-nf <color>]\n"
       +                        eprint("usage: dmenu [-b] [-i] [-fn <font>] [-nb <color>] [-nf <color>]\n"
                                "             [-p <prompt>] [-sb <color>] [-sf <color>] [-v]\n");
                setlocale(LC_CTYPE, "");
                dpy = XOpenDisplay(0);