dmenu-numbers-4.9.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dmenu-numbers-4.9.diff (2393B)
       ---
            1 From 61abc60dbfaa8ec63fcd176307308aee88a19e32 Mon Sep 17 00:00:00 2001
            2 From: Miles Alan <m@milesalan.com>
            3 Date: Sat, 10 Aug 2019 17:20:08 -0500
            4 Subject: [PATCH] Display number of matched and total items in top right corner
            5 
            6 ---
            7  dmenu.c | 25 +++++++++++++++++++++++--
            8  1 file changed, 23 insertions(+), 2 deletions(-)
            9 
           10 diff --git a/dmenu.c b/dmenu.c
           11 index 6b8f51b..98c5810 100644
           12 --- a/dmenu.c
           13 +++ b/dmenu.c
           14 @@ -24,6 +24,8 @@
           15                               * MAX(0, MIN((y)+(h),(r).y_org+(r).height) - MAX((y),(r).y_org)))
           16  #define LENGTH(X)             (sizeof X / sizeof X[0])
           17  #define TEXTW(X)              (drw_fontset_getwidth(drw, (X)) + lrpad)
           18 +#define NUMBERSMAXDIGITS      100
           19 +#define NUMBERSBUFSIZE        (NUMBERSMAXDIGITS * 2) + 1
           20  
           21  /* enums */
           22  enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */
           23 @@ -34,6 +36,7 @@ struct item {
           24          int out;
           25  };
           26  
           27 +static char numbers[NUMBERSBUFSIZE] = "";
           28  static char text[BUFSIZ] = "";
           29  static char *embed;
           30  static int bh, mw, mh;
           31 @@ -126,6 +129,21 @@ drawitem(struct item *item, int x, int y, int w)
           32          return drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
           33  }
           34  
           35 +static void
           36 +recalculatenumbers()
           37 +{
           38 +        unsigned int numer = 0, denom = 0;
           39 +        struct item *item;
           40 +        if (matchend) {
           41 +                numer++;
           42 +                for (item = matchend; item && item->left; item = item->left)
           43 +                        numer++;
           44 +        }
           45 +        for (item = items; item && item->text; item++)
           46 +                denom++;
           47 +        snprintf(numbers, NUMBERSBUFSIZE, "%d/%d", numer, denom);
           48 +}
           49 +
           50  static void
           51  drawmenu(void)
           52  {
           53 @@ -151,6 +169,7 @@ drawmenu(void)
           54                  drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0);
           55          }
           56  
           57 +        recalculatenumbers();
           58          if (lines > 0) {
           59                  /* draw vertical list */
           60                  for (item = curr; item != next; item = item->right)
           61 @@ -165,13 +184,15 @@ drawmenu(void)
           62                  }
           63                  x += w;
           64                  for (item = curr; item != next; item = item->right)
           65 -                        x = drawitem(item, x, 0, MIN(TEXTW(item->text), mw - x - TEXTW(">")));
           66 +                        x = drawitem(item, x, 0, MIN(TEXTW(item->text), mw - x - TEXTW(">") - TEXTW(numbers)));
           67                  if (next) {
           68                          w = TEXTW(">");
           69                          drw_setscheme(drw, scheme[SchemeNorm]);
           70 -                        drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0);
           71 +                        drw_text(drw, mw - w - TEXTW(numbers), 0, w, bh, lrpad / 2, ">", 0);
           72                  }
           73          }
           74 +        drw_setscheme(drw, scheme[SchemeNorm]);
           75 +        drw_text(drw, mw - TEXTW(numbers), 0, TEXTW(numbers), bh, lrpad / 2, numbers, 0);
           76          drw_map(drw, win, 0, 0, mw, mh);
           77  }
           78  
           79 -- 
           80 2.19.2
           81