aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dmenu.14
-rw-r--r--dmenu.c15
2 files changed, 10 insertions, 9 deletions
diff --git a/dmenu.1 b/dmenu.1
index a1ec695..45f9cf1 100644
--- a/dmenu.1
+++ b/dmenu.1
@@ -55,7 +55,7 @@ dmenu lists items vertically, with the given number of lines.
55defines the prompt to be displayed to the left of the input field. 55defines the prompt to be displayed to the left of the input field.
56.TP 56.TP
57.BI \-fn " font" 57.BI \-fn " font"
58defines the font set used. 58defines the font or font set used.
59.TP 59.TP
60.BI \-nb " color" 60.BI \-nb " color"
61defines the normal background color. 61defines the normal background color.
@@ -93,7 +93,7 @@ success.
93.B Escape (Control\-c) 93.B Escape (Control\-c)
94Exit without selecting an item, returning failure. 94Exit without selecting an item, returning failure.
95.TP 95.TP
96.B Control\-y 96.B Shift\-Insert
97Paste the current X selection into the input field. 97Paste the current X selection into the input field.
98.SH SEE ALSO 98.SH SEE ALSO
99.BR dwm (1) 99.BR dwm (1)
diff --git a/dmenu.c b/dmenu.c
index 22fbfed..2596b56 100644
--- a/dmenu.c
+++ b/dmenu.c
@@ -83,10 +83,10 @@ calcoffsets(void) {
83 n = mw - (promptw + inputw + dc_textw(dc, "<") + dc_textw(dc, ">")); 83 n = mw - (promptw + inputw + dc_textw(dc, "<") + dc_textw(dc, ">"));
84 84
85 for(i = 0, next = curr; next; next = next->right) 85 for(i = 0, next = curr; next; next = next->right)
86 if((i += (lines > 0) ? bh : MIN(dc_textw(dc, next->text), mw/3)) > n) 86 if((i += (lines > 0) ? bh : dc_textw(dc, next->text)) > n)
87 break; 87 break;
88 for(i = 0, prev = curr; prev && prev->left; prev = prev->left) 88 for(i = 0, prev = curr; prev && prev->left; prev = prev->left)
89 if((i += (lines > 0) ? bh : MIN(dc_textw(dc, prev->left->text), mw/3)) > n) 89 if((i += (lines > 0) ? bh : dc_textw(dc, prev->left->text)) > n)
90 break; 90 break;
91} 91}
92 92
@@ -124,7 +124,7 @@ drawmenu(void) {
124 dc_drawtext(dc, "<", normcol); 124 dc_drawtext(dc, "<", normcol);
125 for(item = curr; item != next; item = item->right) { 125 for(item = curr; item != next; item = item->right) {
126 dc->x += dc->w; 126 dc->x += dc->w;
127 dc->w = MIN(dc_textw(dc, item->text), mw/3); 127 dc->w = dc_textw(dc, item->text);
128 dc_drawtext(dc, item->text, (item == sel) ? selcol : normcol); 128 dc_drawtext(dc, item->text, (item == sel) ? selcol : normcol);
129 } 129 }
130 dc->w = dc_textw(dc, ">"); 130 dc->w = dc_textw(dc, ">");
@@ -226,9 +226,6 @@ keypress(XKeyEvent *ev) {
226 while(cursor > 0 && text[nextrune(-1)] != ' ') 226 while(cursor > 0 && text[nextrune(-1)] != ' ')
227 insert(NULL, nextrune(-1) - cursor); 227 insert(NULL, nextrune(-1) - cursor);
228 break; 228 break;
229 case XK_y: /* paste selection */
230 XConvertSelection(dc->dpy, XA_PRIMARY, utf8, utf8, win, CurrentTime);
231 return;
232 } 229 }
233 } 230 }
234 switch(ksym) { 231 switch(ksym) {
@@ -266,6 +263,10 @@ keypress(XKeyEvent *ev) {
266 sel = curr = matches; 263 sel = curr = matches;
267 calcoffsets(); 264 calcoffsets();
268 break; 265 break;
266 case XK_Insert: /* paste selection */
267 if(ev->state & ShiftMask)
268 XConvertSelection(dc->dpy, XA_PRIMARY, utf8, utf8, win, CurrentTime);
269 return;
269 case XK_Left: 270 case XK_Left:
270 if(cursor > 0 && (!sel || !sel->left || lines > 0)) { 271 if(cursor > 0 && (!sel || !sel->left || lines > 0)) {
271 cursor = nextrune(-1); 272 cursor = nextrune(-1);
@@ -480,7 +481,7 @@ setup(void) {
480 grabkeyboard(); 481 grabkeyboard();
481 dc_resize(dc, mw, mh); 482 dc_resize(dc, mw, mh);
482 inputw = MIN(inputw, mw/3); 483 inputw = MIN(inputw, mw/3);
483 promptw = prompt ? MIN(dc_textw(dc, prompt), mw/5) : 0; 484 promptw = prompt ? dc_textw(dc, prompt) : 0;
484 XMapRaised(dc->dpy, win); 485 XMapRaised(dc->dpy, win);
485 text[0] = '\0'; 486 text[0] = '\0';
486 match(); 487 match();