]> git.armaanb.net Git - dmenu.git/commitdiff
applied multisel patch to mainline
authorAnselm R Garbe <anselm@garbe.us>
Wed, 17 Apr 2013 18:56:54 +0000 (20:56 +0200)
committerAnselm R Garbe <anselm@garbe.us>
Wed, 17 Apr 2013 18:56:54 +0000 (20:56 +0200)
dmenu.1
dmenu.c

diff --git a/dmenu.1 b/dmenu.1
index 3a0f4ef68407c8f14bc57486bcfa7b7ae14db639..88f77de337b226616df8cf8e97a53eb04fdf8f3e 100644 (file)
--- a/dmenu.1
+++ b/dmenu.1
@@ -83,6 +83,9 @@ Copy the selected item to the input field.
 Confirm selection.  Prints the selected item to stdout and exits, returning
 success.
 .TP
 Confirm selection.  Prints the selected item to stdout and exits, returning
 success.
 .TP
+.B Ctrl-Return
+Confirm selection.  Prints the selected item to stdout and continues.
+.TP
 .B Shift\-Return
 Confirm input.  Prints the input text to stdout and exits, returning success.
 .TP
 .B Shift\-Return
 Confirm input.  Prints the input text to stdout and exits, returning success.
 .TP
diff --git a/dmenu.c b/dmenu.c
index 39628012f5f65c30937c1e5996e3882a54b3008d..efc1e54b16e6e47d9f6643fb829df688f7ffe0fb 100644 (file)
--- a/dmenu.c
+++ b/dmenu.c
@@ -22,6 +22,7 @@ typedef struct Item Item;
 struct Item {
        char *text;
        Item *left, *right;
 struct Item {
        char *text;
        Item *left, *right;
+       Bool out;
 };
 
 static void appenditem(Item *item, Item **list, Item **last);
 };
 
 static void appenditem(Item *item, Item **list, Item **last);
@@ -49,9 +50,12 @@ static const char *normbgcolor = "#222222";
 static const char *normfgcolor = "#bbbbbb";
 static const char *selbgcolor  = "#005577";
 static const char *selfgcolor  = "#eeeeee";
 static const char *normfgcolor = "#bbbbbb";
 static const char *selbgcolor  = "#005577";
 static const char *selfgcolor  = "#eeeeee";
+static const char *outbgcolor  = "#00ffff";
+static const char *outfgcolor  = "#000000";
 static unsigned int lines = 0;
 static unsigned long normcol[ColLast];
 static unsigned long selcol[ColLast];
 static unsigned int lines = 0;
 static unsigned long normcol[ColLast];
 static unsigned long selcol[ColLast];
+static unsigned long outcol[ColLast];
 static Atom clip, utf8;
 static Bool topbar = True;
 static DC *dc;
 static Atom clip, utf8;
 static Bool topbar = True;
 static DC *dc;
@@ -185,7 +189,8 @@ drawmenu(void) {
                dc->w = mw - dc->x;
                for(item = curr; item != next; item = item->right) {
                        dc->y += dc->h;
                dc->w = mw - dc->x;
                for(item = curr; item != next; item = item->right) {
                        dc->y += dc->h;
-                       drawtext(dc, item->text, (item == sel) ? selcol : normcol);
+                       drawtext(dc, item->text, (item == sel) ? selcol :
+                                                (item->out)   ? outcol : normcol);
                }
        }
        else if(matches) {
                }
        }
        else if(matches) {
@@ -197,7 +202,8 @@ drawmenu(void) {
                for(item = curr; item != next; item = item->right) {
                        dc->x += dc->w;
                        dc->w = MIN(textw(dc, item->text), mw - dc->x - textw(dc, ">"));
                for(item = curr; item != next; item = item->right) {
                        dc->x += dc->w;
                        dc->w = MIN(textw(dc, item->text), mw - dc->x - textw(dc, ">"));
-                       drawtext(dc, item->text, (item == sel) ? selcol : normcol);
+                       drawtext(dc, item->text, (item == sel) ? selcol :
+                                                (item->out)   ? outcol : normcol);
                }
                dc->w = textw(dc, ">");
                dc->x = mw - dc->w;
                }
                dc->w = textw(dc, ">");
                dc->x = mw - dc->w;
@@ -278,6 +284,9 @@ keypress(XKeyEvent *ev) {
                        XConvertSelection(dc->dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY,
                                          utf8, utf8, win, CurrentTime);
                        return;
                        XConvertSelection(dc->dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY,
                                          utf8, utf8, win, CurrentTime);
                        return;
+               case XK_Return:
+               case XK_KP_Enter:
+                       break;
                default:
                        return;
                }
                default:
                        return;
                }
@@ -362,7 +371,10 @@ keypress(XKeyEvent *ev) {
        case XK_Return:
        case XK_KP_Enter:
                puts((sel && !(ev->state & ShiftMask)) ? sel->text : text);
        case XK_Return:
        case XK_KP_Enter:
                puts((sel && !(ev->state & ShiftMask)) ? sel->text : text);
-               exit(EXIT_SUCCESS);
+               if(!(ev->state & ControlMask))
+                       exit(EXIT_SUCCESS);
+               sel->out = True;
+               break;
        case XK_Right:
                if(text[cursor] != '\0') {
                        cursor = nextrune(+1);
        case XK_Right:
                if(text[cursor] != '\0') {
                        cursor = nextrune(+1);
@@ -480,6 +492,7 @@ readstdin(void) {
                        *p = '\0';
                if(!(items[i].text = strdup(buf)))
                        eprintf("cannot strdup %u bytes:", strlen(buf)+1);
                        *p = '\0';
                if(!(items[i].text = strdup(buf)))
                        eprintf("cannot strdup %u bytes:", strlen(buf)+1);
+               items[i].out = False;
                if(strlen(items[i].text) > max)
                        max = strlen(maxstr = items[i].text);
        }
                if(strlen(items[i].text) > max)
                        max = strlen(maxstr = items[i].text);
        }
@@ -531,6 +544,8 @@ setup(void) {
        normcol[ColFG] = getcolor(dc, normfgcolor);
        selcol[ColBG]  = getcolor(dc, selbgcolor);
        selcol[ColFG]  = getcolor(dc, selfgcolor);
        normcol[ColFG] = getcolor(dc, normfgcolor);
        selcol[ColBG]  = getcolor(dc, selbgcolor);
        selcol[ColFG]  = getcolor(dc, selfgcolor);
+       outcol[ColBG]  = getcolor(dc, outbgcolor);
+       outcol[ColFG]  = getcolor(dc, outfgcolor);
 
        clip = XInternAtom(dc->dpy, "CLIPBOARD",   False);
        utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False);
 
        clip = XInternAtom(dc->dpy, "CLIPBOARD",   False);
        utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False);