static char *getsel(void);
static void selcopy(Time);
static void selscroll(int, int);
-static void selsnap(int, int *, int *, int);
+static void selsnap(int *, int *, int);
static int x2col(int);
static int y2row(int);
static void getbuttoninfo(XEvent *);
sel.nb.y = MIN(sel.ob.y, sel.oe.y);
sel.ne.y = MAX(sel.ob.y, sel.oe.y);
- selsnap(sel.snap, &sel.nb.x, &sel.nb.y, -1);
- selsnap(sel.snap, &sel.ne.x, &sel.ne.y, +1);
+ selsnap(&sel.nb.x, &sel.nb.y, -1);
+ selsnap(&sel.ne.x, &sel.ne.y, +1);
/* expand selection over line breaks */
if (sel.type == SEL_RECTANGULAR)
}
void
-selsnap(int mode, int *x, int *y, int direction) {
+selsnap(int *x, int *y, int direction) {
int newx, newy, xt, yt;
bool delim, prevdelim;
Glyph *gp, *prevgp;
- switch(mode) {
+ switch(sel.snap) {
case SNAP_WORD:
/*
* Snap around if the word wraps around at the end or
}
if(!IS_SET(MODE_MOUSEX10)) {
- button += (state & ShiftMask ? 4 : 0)
- + (state & Mod4Mask ? 8 : 0)
- + (state & ControlMask ? 16 : 0);
+ button += ((state & ShiftMask ) ? 4 : 0)
+ + ((state & Mod4Mask ) ? 8 : 0)
+ + ((state & ControlMask) ? 16 : 0);
}
- len = 0;
if(IS_SET(MODE_MOUSESGR)) {
len = snprintf(buf, sizeof(buf), "\033[<%d;%d;%d%c",
button, x+1, y+1,
void
sigchld(int a) {
int stat, ret;
+ pid_t p;
- if(waitpid(pid, &stat, 0) < 0)
+ if((p = waitpid(pid, &stat, WNOHANG)) < 0)
die("Waiting for pid %hd failed: %s\n", pid, strerror(errno));
+ if(pid != p)
+ return;
+
ret = WIFEXITED(stat) ? WEXITSTATUS(stat) : EXIT_FAILURE;
if (ret != EXIT_SUCCESS)
die("child finished with error '%d'\n", stat);