static void cmdkey(Win *w, Rune r) { switch(r){ case Kview: cmdscroll(w, 3); return; case Kup: cmdscroll(w, -3); return; case Kleft: if(w->fr.p0 == 0) return; setsel(w, w->fr.p0 - 1, w->fr.p0 - 1); return; case Kright: if(w->toprune + w->fr.p1 == w->nrunes) return; setsel(w, w->fr.p1 + 1, w->fr.p1 + 1); return; } if(w->fr.p0 < w->fr.p1) cmddel(w, w->toprune + w->fr.p0, w->toprune + w->fr.p1); switch(r){ case 0x00: case Kesc: break; case '\b': if(w->fr.p0 > 0 && w->toprune + w->fr.p0 != w->opoint) cmddel(w, w->toprune + w->fr.p0 - 1, w->toprune + w->fr.p0); break; case '\n': cmdinsert(w, &r, 1, w->fr.p0 + w->toprune); if(w->toprune + w->fr.p0 == w->nrunes) cmdline(w); break; default: cmdinsert(w, &r, 1, w->fr.p0 + w->toprune); } }
void mousesel(XEvent *e, int done) { int type, seltype = SEL_REGULAR; uint state = e->xbutton.state & ~(Button1Mask | forceselmod); for (type = 1; type < LEN(selmasks); ++type) { if (match(selmasks[type], state)) { seltype = type; break; } } selextend(evcol(e), evrow(e), seltype, done); if (done) setsel(getsel(), e->xbutton.time); }
void xsetsel(char *str) { setsel(str, CurrentTime); }