rebound paste, removed useless max widths

This commit is contained in:
Connor Lane Smith 2010-08-20 13:50:44 +01:00
parent 5376113039
commit b81c1e88cd
2 changed files with 10 additions and 9 deletions

View File

@ -55,7 +55,7 @@ dmenu lists items vertically, with the given number of lines.
defines the prompt to be displayed to the left of the input field. defines the prompt to be displayed to the left of the input field.
.TP .TP
.BI \-fn " font" .BI \-fn " font"
defines the font set used. defines the font or font set used.
.TP .TP
.BI \-nb " color" .BI \-nb " color"
defines the normal background color. defines the normal background color.
@ -93,7 +93,7 @@ success.
.B Escape (Control\-c) .B Escape (Control\-c)
Exit without selecting an item, returning failure. Exit without selecting an item, returning failure.
.TP .TP
.B Control\-y .B Shift\-Insert
Paste the current X selection into the input field. Paste the current X selection into the input field.
.SH SEE ALSO .SH SEE ALSO
.BR dwm (1) .BR dwm (1)

15
dmenu.c
View File

@ -83,10 +83,10 @@ calcoffsets(void) {
n = mw - (promptw + inputw + dc_textw(dc, "<") + dc_textw(dc, ">")); n = mw - (promptw + inputw + dc_textw(dc, "<") + dc_textw(dc, ">"));
for(i = 0, next = curr; next; next = next->right) for(i = 0, next = curr; next; next = next->right)
if((i += (lines > 0) ? bh : MIN(dc_textw(dc, next->text), mw/3)) > n) if((i += (lines > 0) ? bh : dc_textw(dc, next->text)) > n)
break; break;
for(i = 0, prev = curr; prev && prev->left; prev = prev->left) for(i = 0, prev = curr; prev && prev->left; prev = prev->left)
if((i += (lines > 0) ? bh : MIN(dc_textw(dc, prev->left->text), mw/3)) > n) if((i += (lines > 0) ? bh : dc_textw(dc, prev->left->text)) > n)
break; break;
} }
@ -124,7 +124,7 @@ drawmenu(void) {
dc_drawtext(dc, "<", normcol); dc_drawtext(dc, "<", normcol);
for(item = curr; item != next; item = item->right) { for(item = curr; item != next; item = item->right) {
dc->x += dc->w; dc->x += dc->w;
dc->w = MIN(dc_textw(dc, item->text), mw/3); dc->w = dc_textw(dc, item->text);
dc_drawtext(dc, item->text, (item == sel) ? selcol : normcol); dc_drawtext(dc, item->text, (item == sel) ? selcol : normcol);
} }
dc->w = dc_textw(dc, ">"); dc->w = dc_textw(dc, ">");
@ -226,9 +226,6 @@ keypress(XKeyEvent *ev) {
while(cursor > 0 && text[nextrune(-1)] != ' ') while(cursor > 0 && text[nextrune(-1)] != ' ')
insert(NULL, nextrune(-1) - cursor); insert(NULL, nextrune(-1) - cursor);
break; break;
case XK_y: /* paste selection */
XConvertSelection(dc->dpy, XA_PRIMARY, utf8, utf8, win, CurrentTime);
return;
} }
} }
switch(ksym) { switch(ksym) {
@ -266,6 +263,10 @@ keypress(XKeyEvent *ev) {
sel = curr = matches; sel = curr = matches;
calcoffsets(); calcoffsets();
break; break;
case XK_Insert: /* paste selection */
if(ev->state & ShiftMask)
XConvertSelection(dc->dpy, XA_PRIMARY, utf8, utf8, win, CurrentTime);
return;
case XK_Left: case XK_Left:
if(cursor > 0 && (!sel || !sel->left || lines > 0)) { if(cursor > 0 && (!sel || !sel->left || lines > 0)) {
cursor = nextrune(-1); cursor = nextrune(-1);
@ -480,7 +481,7 @@ setup(void) {
grabkeyboard(); grabkeyboard();
dc_resize(dc, mw, mh); dc_resize(dc, mw, mh);
inputw = MIN(inputw, mw/3); inputw = MIN(inputw, mw/3);
promptw = prompt ? MIN(dc_textw(dc, prompt), mw/5) : 0; promptw = prompt ? dc_textw(dc, prompt) : 0;
XMapRaised(dc->dpy, win); XMapRaised(dc->dpy, win);
text[0] = '\0'; text[0] = '\0';
match(); match();