dmenu-preselect-20200513-db6093f.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dmenu-preselect-20200513-db6093f.diff (2390B)
       ---
            1 From 055e86dee88c5135b3d3a691942a915334d1b3a2 Mon Sep 17 00:00:00 2001
            2 From: Mathieu Moneyron <mathieu.moneyron@gmail.com>
            3 Date: Wed, 13 May 2020 17:28:37 +0200
            4 Subject: [PATCH] Added option to preselect an item by providing a number
            5 
            6 ---
            7  config.def.h |  3 +++
            8  dmenu.1      |  5 +++++
            9  dmenu.c      | 15 ++++++++++++++-
           10  3 files changed, 22 insertions(+), 1 deletion(-)
           11 
           12 diff --git a/config.def.h b/config.def.h
           13 index 1edb647..95bee59 100644
           14 --- a/config.def.h
           15 +++ b/config.def.h
           16 @@ -21,3 +21,6 @@ static unsigned int lines      = 0;
           17   * for example: " /?\"&[]"
           18   */
           19  static const char worddelimiters[] = " ";
           20 +
           21 +/* -n option; preselected item starting from 0 */
           22 +static unsigned int preselected = 0;
           23 diff --git a/dmenu.1 b/dmenu.1
           24 index 323f93c..6e1ee7f 100644
           25 --- a/dmenu.1
           26 +++ b/dmenu.1
           27 @@ -22,6 +22,8 @@ dmenu \- dynamic menu
           28  .IR color ]
           29  .RB [ \-w
           30  .IR windowid ]
           31 +.RB [ \-n
           32 +.IR number ]
           33  .P
           34  .BR dmenu_run " ..."
           35  .SH DESCRIPTION
           36 @@ -80,6 +82,9 @@ prints version information to stdout, then exits.
           37  .TP
           38  .BI \-w " windowid"
           39  embed into windowid.
           40 +.TP
           41 +.BI \-n " number"
           42 +preseslected item starting from 0.
           43  .SH USAGE
           44  dmenu is completely controlled by the keyboard.  Items are selected using the
           45  arrow keys, page up, page down, home, and end.
           46 diff --git a/dmenu.c b/dmenu.c
           47 index 65f25ce..0a02609 100644
           48 --- a/dmenu.c
           49 +++ b/dmenu.c
           50 @@ -551,8 +551,19 @@ static void
           51  run(void)
           52  {
           53          XEvent ev;
           54 +        int i;
           55  
           56          while (!XNextEvent(dpy, &ev)) {
           57 +                if (preselected) {
           58 +                        for (i = 0; i < preselected; i++) {
           59 +                                if (sel && sel->right && (sel = sel->right) == next) {
           60 +                                        curr = next;
           61 +                                        calcoffsets();
           62 +                                }
           63 +                        }
           64 +                        drawmenu();
           65 +                        preselected = 0;
           66 +                }
           67                  if (XFilterEvent(&ev, win))
           68                          continue;
           69                  switch(ev.type) {
           70 @@ -690,7 +701,7 @@ static void
           71  usage(void)
           72  {
           73          fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
           74 -              "             [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr);
           75 +              "             [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid] [-n number]\n", stderr);
           76          exit(1);
           77  }
           78  
           79 @@ -733,6 +744,8 @@ main(int argc, char *argv[])
           80                          colors[SchemeSel][ColFg] = argv[++i];
           81                  else if (!strcmp(argv[i], "-w"))   /* embedding window id */
           82                          embed = argv[++i];
           83 +                else if (!strcmp(argv[i], "-n"))   /* preselected item */
           84 +                        preselected = atoi(argv[++i]);
           85                  else
           86                          usage();
           87  
           88 -- 
           89 2.26.2
           90