int vijoin(UNUSED(char **args)) { int x, pos; startvichange(-1); if ((x = findeol()) == zlell) return 1; zlecs = x + 1; pos = zlecs; for (; zlecs != zlell && ZC_iblank(zleline[zlecs]); INCPOS(zlecs)) ; x = 1 + (zlecs - pos); backdel(x, CUT_RAW); if (zlecs) { int pos = zlecs; DECPOS(pos); if (ZC_iblank(zleline[pos])) { zlecs = pos; return 0; } } spaceinline(1); zleline[zlecs] = ZWC(' '); return 0; }
int vibackwardwordend(char **args) { int n = zmult; if (n < 0) { int ret; zmult = -n; ret = viforwardwordend(args); zmult = n; return ret; } while (n-- && zlecs > 1) { int cc = wordclass(zleline[zlecs]); DECCS(); while (zlecs) { if (wordclass(zleline[zlecs]) != cc || ZC_iblank(zleline[zlecs])) break; DECCS(); } while (zlecs && ZC_iblank(zleline[zlecs])) DECCS(); } return 0; }
int vibackwardwordend(char **args) { int n = zmult; if (n < 0) { int ret; zmult = -n; ret = viforwardwordend(args); zmult = n; return ret; } while (n-- && zlecs > 1) { int start = 0; if (Z_vialnum(zleline[zlecs])) start = 1; else if (!ZC_inblank(zleline[zlecs])) start = 2; DECCS(); while (zlecs) { int same = (start != 1) && ZC_iblank(zleline[zlecs]); if (start) same |= Z_vialnum(zleline[zlecs]); if (same == (start == 2)) break; DECCS(); } while (zlecs && ZC_iblank(zleline[zlecs])) DECCS(); } return 0; }
int vibackwardkillword(UNUSED(char **args)) { int x = zlecs, lim = (viinsbegin > findbol()) ? viinsbegin : findbol(); int n = zmult; if (n < 0) return 1; /* this taken from "vibackwardword" */ while (n--) { while (x > lim) { int pos = x; DECPOS(pos); if (!ZC_iblank(zleline[pos])) break; x = pos; } if (x > lim) { int cc; int pos = x; DECPOS(pos); cc = wordclass(zleline[pos]); for (;;) { x = pos; if (x <= lim) break; DECPOS(pos); if (wordclass(zleline[pos]) != cc) break; } } } backkill(zlecs - x, CUT_FRONT|CUT_RAW); return 0; }
int vijoin(UNUSED(char **args)) { int x, pos; int n = zmult; int visual = region_active; startvichange(-1); if (n < 1) return 1; if (visual && zlecs > mark) { exchangepointandmark(zlenoargs); x = findeol(); if (x >= mark) { exchangepointandmark(zlenoargs); return 1; } } else if ((x = findeol()) == zlell || (visual && x >= mark)) return 1; while (n) { zlecs = x + 1; pos = zlecs; for (; zlecs != zlell && ZC_iblank(zleline[zlecs]); INCPOS(zlecs)) ; x = 1 + (zlecs - pos); backdel(x, CUT_RAW); if (zlecs) { int pos = zlecs; DECPOS(pos); if (ZC_iblank(zleline[pos])) { zlecs = pos; return 0; } } spaceinline(1); zleline[zlecs] = ZWC(' '); if ((!visual && --n < 2) || (x = findeol()) == zlell || (visual && x >= mark)) return 0; } return 0; }
int wordclass(ZLE_CHAR_T x) { return (ZC_iblank(x) ? 0 : ((ZC_ialnum(x) || (ZWC('_') == x)) ? 1 : ZC_ipunct(x) ? 2 : 3)); }