return n;
}
+static void
+movewordedge(int dir)
+{
+ if (dir < 0) { /* move cursor to the start of the word*/
+ while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)]))
+ cursor = nextrune(-1);
+ while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)]))
+ cursor = nextrune(-1);
+ } else { /* move cursor to the end of the word */
+ while (text[cursor] && strchr(worddelimiters, text[cursor]))
+ cursor = nextrune(+1);
+ while (text[cursor] && !strchr(worddelimiters, text[cursor]))
+ cursor = nextrune(+1);
+ }
+}
+
static void
keypress(XKeyEvent *ev)
{
XConvertSelection(dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY,
utf8, utf8, win, CurrentTime);
return;
+ case XK_Left:
+ movewordedge(-1);
+ ksym = NoSymbol;
+ break;
+ case XK_Right:
+ movewordedge(+1);
+ ksym = NoSymbol;
+ break;
case XK_Return:
case XK_KP_Enter:
break;
}
else if (ev->state & Mod1Mask)
switch(ksym) {
+ case XK_b:
+ movewordedge(-1);
+ ksym = NoSymbol;
+ break;
+ case XK_f:
+ movewordedge(+1);
+ ksym = NoSymbol;
+ break;
case XK_g: ksym = XK_Home; break;
case XK_G: ksym = XK_End; break;
case XK_h: ksym = XK_Up; break;
if (!iscntrl(*buf))
insert(buf, len);
break;
+ case NoSymbol:
+ break;
case XK_Delete:
if (text[cursor] == '\0')
return;
Atom da;
/* we have been given the current selection, now insert it into input */
- XGetWindowProperty(dpy, win, utf8, 0, (sizeof text / 4) + 1, False,
- utf8, &da, &di, &dl, &dl, (unsigned char **)&p);
- insert(p, (q = strchr(p, '\n')) ? q - p : (ssize_t)strlen(p));
- XFree(p);
+ if (XGetWindowProperty(dpy, win, utf8, 0, (sizeof text / 4) + 1, False,
+ utf8, &da, &di, &dl, &dl, (unsigned char **)&p)
+ == Success && p) {
+ insert(p, (q = strchr(p, '\n')) ? q - p : (ssize_t)strlen(p));
+ XFree(p);
+ }
drawmenu();
}
static void
setup(void)
{
- int x, y, i = 0;
+ int x, y, i, j;
unsigned int du;
XSetWindowAttributes swa;
XIM xim;
#ifdef XINERAMA
XineramaScreenInfo *info;
Window pw;
- int a, j, di, n, area = 0;
+ int a, di, n, area = 0;
#endif
-
/* init appearance */
for (j = 0; j < SchemeLast; j++)
scheme[j] = drw_scm_create(drw, colors[j], 2);
lines = MAX(lines, 0);
mh = (lines + 1) * bh;
#ifdef XINERAMA
+ i = 0;
if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
XGetInputFocus(dpy, &w, &di);
if (mon >= 0 && mon < n)