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 vibackwarddeletechar(char **args) { int n = zmult; if (invicmdmode()) startvichange(-1); /* handle negative argument */ if (n < 0) { int ret; zmult = -n; ret = videletechar(args); zmult = n; return ret; } /* It is an error to be at the beginning of the line, or (in * * insert mode) to delete past the beginning of insertion. */ if ((!invicmdmode() && zlecs - n < viinsbegin) || zlecs == findbol()) { return 1; } /* Put argument into the acceptable range -- it is not an error to * * specify a greater count than the number of available characters. */ /* HERE: we should do the test properly with DECPOS(). */ if (n > zlecs - findbol()) { n = zlecs - findbol(); /* do the deletion */ backkill(n, CUT_FRONT|CUT_RAW); } else backkill(n, CUT_FRONT); return 0; }
void viputafter(void) { Cutbuffer buf = &cutbuf; startvichange(-1); if (zmult < 0) return; if (gotvibufspec) buf = &vibuf[vibufspec]; if (!buf->buf) { feep(); return; } vilinerange = !!(buf->flags & CUTBUFFER_LINE); if (vilinerange) { cs = findeol(); spaceinline(buf->len + 1); line[cs++] = '\n'; memcpy((char *)line + cs, buf->buf, buf->len); vifirstnonblank(); } else { if (cs != findeol()) cs++; while (zmult--) { spaceinline(buf->len); memcpy((char *)line + cs, buf->buf, buf->len); cs += buf->len; } if (cs) cs--; } }
int viputafter(UNUSED(char **args)) { Cutbuffer buf = &cutbuf; int n = zmult; startvichange(-1); if (n < 0) return 1; if (zmod.flags & MOD_VIBUF) buf = &vibuf[zmod.vibuf]; if (!buf->buf) return 1; if(buf->flags & CUTBUFFER_LINE) { zlecs = findeol(); spaceinline(buf->len + 1); zleline[zlecs++] = ZWC('\n'); ZS_memcpy(zleline + zlecs, buf->buf, buf->len); vifirstnonblank(zlenoargs); } else { if (zlecs != findeol()) INCCS(); while (n--) { spaceinline(buf->len); ZS_memcpy(zleline + zlecs, buf->buf, buf->len); zlecs += buf->len; } if (zlecs) DECCS(); } return 0; }
void viunindent(void) { int oldcs = cs, c2; /* get the range */ startvichange(1); if ((c2 = getvirange(0)) == -1) { vichgflag = vilinerange = 0; return; } vichgflag = 0; /* must be a line range */ if (!vilinerange) { feep(); cs = oldcs; return; } vilinerange = 0; oldcs = cs; /* remove a tab from the beginning of each line within range */ while (cs < c2) { if (line[cs] == '\t') foredel(1); cs = findeol() + 1; } /* go back to the first line of the range */ cs = oldcs; vifirstnonblank(); }
int videletechar(char **args) { int n = zmult; startvichange(-1); /* handle negative argument */ if (n < 0) { int ret; zmult = -n; ret = vibackwarddeletechar(args); zmult = n; return ret; } /* it is an error to be on the end of line */ if (zlecs == zlell || zleline[zlecs] == '\n') return 1; /* Put argument into the acceptable range -- it is not an error to * * specify a greater count than the number of available characters. */ /* HERE: we should do the test properly with INCPOS(). */ if (n > findeol() - zlecs) { n = findeol() - zlecs; /* do the deletion */ forekill(n, CUT_RAW); } else { forekill(n, 0); } return 0; }
void vireplacechars(void) { int ch; startvichange(1); /* get key */ if((ch = vigetkey()) == -1) { vichgflag = 0; feep(); return; } /* check argument range */ if (zmult < 0 || zmult + cs > findeol()) { vichgflag = 0; feep(); return; } /* do change */ if (ch == '\r' || ch == '\n') { /* <return> handled specially */ cs += zmult - 1; backkill(zmult - 1, 0); line[cs++] = '\n'; } else { while (zmult--) line[cs++] = ch; cs--; } vichgflag = 0; }
int vireplacechars(UNUSED(char **args)) { ZLE_INT_T ch; int n = zmult, fail = 0, newchars = 0; if (n > 0) { int pos = zlecs; while (n-- > 0) { if (pos == zlell || zleline[pos] == ZWC('\n')) { fail = 1; break; } newchars++; INCPOS(pos); } n = pos - zlecs; } startvichange(1); /* check argument range */ if (n < 1 || fail) { if(vichgrepeat) vigetkey(); if(vichgflag) { free(vichgbuf); vichgbuf = NULL; vichgflag = 0; } return 1; } /* get key */ if((ch = vigetkey()) == ZLEEOF) { vichgflag = 0; return 1; } /* do change */ if (ch == ZWC('\r') || ch == ZWC('\n')) { /* <return> handled specially */ zlecs += n - 1; backkill(n - 1, CUT_RAW); zleline[zlecs++] = '\n'; } else { /* * Make sure we delete displayed characters, including * attach combining characters. n includes this as a raw * buffer offset. * Use shiftchars so as not to adjust the cursor position; * we are overwriting anything that remains directly. */ if (n > newchars) shiftchars(zlecs, n - newchars); else if (n < newchars) spaceinline(newchars - n); while (newchars--) zleline[zlecs++] = ch; zlecs--; } vichgflag = 0; return 0; }
int vioperswapcase(UNUSED(char **args)) { int oldcs, c2, ret = 1; /* get the range */ startvichange(1); if ((c2 = getvirange(0)) != -1) { oldcs = zlecs; /* swap the case of all letters within range */ while (zlecs < c2) { if (ZC_ilower(zleline[zlecs])) zleline[zlecs] = ZC_toupper(zleline[zlecs]); else if (ZC_iupper(zleline[zlecs])) zleline[zlecs] = ZC_tolower(zleline[zlecs]); INCCS(); } /* go back to the first line of the range */ zlecs = oldcs; ret = 0; #if 0 vifirstnonblank(); #endif } vichgflag = 0; return ret; }
int vipoundinsert(UNUSED(char **args)) { int oldcs = zlecs; startvichange(-1); vifirstnonblank(zlenoargs); if(zleline[zlecs] != '#') { spaceinline(1); zleline[zlecs] = '#'; if(zlecs <= viinsbegin) INCPOS(viinsbegin); if (zlecs <= oldcs) INCPOS(oldcs); zlecs = oldcs; } else { foredel(1, 0); if (zlecs < viinsbegin) DECPOS(viinsbegin); if (zlecs < oldcs) DECPOS(oldcs); zlecs = oldcs; } return 0; }
int viyank(UNUSED(char **args)) { int c2, ret = 1; startvichange(1); if ((c2 = getvirange(0)) != -1) { cut(zlecs, c2 - zlecs, CUT_YANK); ret = 0; } vichgflag = 0; /* cursor now at the start of the range yanked. For line mode * restore the column position */ if (vilinerange && lastcol != -1) { int x = findeol(); if ((zlecs += lastcol) >= x) { zlecs = x; if (zlecs > findbol() && invicmdmode()) DECCS(); } #ifdef MULTIBYTE_SUPPORT else CCRIGHT(); #endif lastcol = -1; } return ret; }
int viunindent(UNUSED(char **args)) { int oldcs = zlecs, c2; /* get the range */ startvichange(1); if ((c2 = getvirange(0)) == -1) { vichgflag = 0; return 1; } vichgflag = 0; /* must be a line range */ if (!vilinerange) { zlecs = oldcs; return 1; } oldcs = zlecs; /* remove a tab from the beginning of each line within range */ while (zlecs < c2) { if (zleline[zlecs] == '\t') foredel(1, 0); zlecs = findeol() + 1; } /* go back to the first line of the range */ zlecs = oldcs; vifirstnonblank(zlenoargs); return 0; }
static void startvitext(int im) { startvichange(im); bindtab = mainbindtab; undoing = 0; viinsbegin = cs; }
static void startvitext(int im) { startvichange(im); selectkeymap("main", 1); vistartchange = undo_changeno; viinsbegin = zlecs; }
static void startvitext(int im) { startvichange(im); selectkeymap("main", 1); vistartchange = (curchange && curchange->prev) ? curchange->prev->changeno : 0; viinsbegin = zlecs; }
static void startvitext(int im) { startvichange(im); selectkeymap("main", 1); undoing = 0; viinsbegin = zlecs; }
void viyank(void) { int oldcs = cs, c2; startvichange(1); if ((c2 = getvirange(0)) != -1) cut(cs, c2 - cs, 0); vichgflag = vilinerange = 0; cs = oldcs; }
int viyankeol(UNUSED(char **args)) { int x = findeol(); startvichange(-1); if (x == zlecs) return 1; cut(zlecs, x - zlecs, 0); return 0; }
void viyankeol(void) { int x = findeol(); startvichange(-1); if (x == cs) { feep(); return; } cut(cs, x - cs, 0); }
void vichange(void) { int c2; startvichange(1); if ((c2 = getvirange(1)) != -1) { forekill(c2 - cs, 0); bindtab = mainbindtab; viinsbegin = cs; undoing = 0; } vilinerange = 0; }
int viyank(UNUSED(char **args)) { int oldcs = zlecs, c2, ret = 1; startvichange(1); if ((c2 = getvirange(0)) != -1) { cut(zlecs, c2 - zlecs, 0); ret = 0; } vichgflag = 0; zlecs = oldcs; return ret; }
int vikilleol(UNUSED(char **args)) { int n = findeol() - zlecs; startvichange(-1); if (!n) { /* error -- line already empty */ return 1; } /* delete to end of line */ forekill(findeol() - zlecs, CUT_RAW); return 0; }
void vikilleol(void) { int n = findeol() - cs; startvichange(-1); if (!n) { /* error -- line already empty */ feep(); return; } /* delete to end of line */ forekill(findeol() - cs, 0); }
int vichange(UNUSED(char **args)) { int c2, ret = 1; startvichange(1); if ((c2 = getvirange(1)) != -1) { ret = 0; forekill(c2 - zlecs, CUT_RAW); selectkeymap("main", 1); viinsbegin = zlecs; vistartchange = (curchange && curchange->prev) ? curchange->prev->changeno : 0; } return ret; }
int vichange(UNUSED(char **args)) { int c2, ret = 1; startvichange(1); if ((c2 = getvirange(1)) != -1) { ret = 0; forekill(c2 - zlecs, CUT_RAW); selectkeymap("main", 1); viinsbegin = zlecs; undoing = 0; } return ret; }
void videlete(void) { int c2; startvichange(1); if ((c2 = getvirange(0)) != -1) { forekill(c2 - cs, 0); if (vilinerange && ll) { if (cs == ll) cs--; foredel(1); vifirstnonblank(); } } vichgflag = vilinerange = 0; }
int viputafter(UNUSED(char **args)) { int n = zmult; startvichange(-1); if (n < 0 || zmod.flags & MOD_NULL) return 1; if (zmod.flags & MOD_VIBUF) kctbuf = &vibuf[zmod.vibuf]; else kctbuf = &cutbuf; if (!kctbuf->buf) return 1; kct = -1; yankcs = zlecs; pastebuf(kctbuf, n, 1); return 0; }
void viswapcase(void) { int eol; startvichange(-1); if (zmult < 1) return; eol = findeol(); while (cs < eol && zmult--) { if (islower(line[cs])) line[cs] = tuupper(line[cs]); else if (isupper(line[cs])) line[cs] = tulower(line[cs]); cs++; } if (cs && cs == eol) cs--; }
int videlete(UNUSED(char **args)) { int c2, ret = 1; startvichange(1); if ((c2 = getvirange(0)) != -1) { forekill(c2 - zlecs, CUT_RAW); ret = 0; if (vilinerange && zlell) { if (zlecs == zlell) DECCS(); foredel(1, 0); vifirstnonblank(zlenoargs); } } vichgflag = 0; return ret; }
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; }