Browse Source

rebound paste, removed useless max widths

master
Connor Lane Smith 14 years ago
parent
commit
b81c1e88cd
  1. 4
      dmenu.1
  2. 15
      dmenu.c

4
dmenu.1

@ -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

@ -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();

Loading…
Cancel
Save