diff options
author | Tanaka Akira <akr@users.sourceforge.net> | 1999-06-27 06:54:32 +0000 |
---|---|---|
committer | Tanaka Akira <akr@users.sourceforge.net> | 1999-06-27 06:54:32 +0000 |
commit | b09922bb063ddf44c7850b182fec4795fbe1ae90 (patch) | |
tree | 8a6dfa5ef6c6012753c0dc5a6e93e6f820b51a58 /Src/Zle/zle_vi.c | |
parent | 346825df86466cf151be61b9429ef2c1734e66ea (diff) | |
download | zsh-b09922bb063ddf44c7850b182fec4795fbe1ae90.tar.gz zsh-b09922bb063ddf44c7850b182fec4795fbe1ae90.tar.xz zsh-b09922bb063ddf44c7850b182fec4795fbe1ae90.zip |
zsh-3.1.5-pws-23 zsh-3.1.5-pws-23
Diffstat (limited to 'Src/Zle/zle_vi.c')
-rw-r--r-- | Src/Zle/zle_vi.c | 126 |
1 files changed, 83 insertions, 43 deletions
diff --git a/Src/Zle/zle_vi.c b/Src/Zle/zle_vi.c index 71f766739..08de69c19 100644 --- a/Src/Zle/zle_vi.c +++ b/Src/Zle/zle_vi.c @@ -102,8 +102,10 @@ vigetkey(void) char m[3], *str; Thingy cmd; - if((c = getkey(0)) == EOF) + if((c = getkey(0)) == EOF) { + feep(); return -1; + } m[0] = c; metafy(m, 1, META_NOALLOC); @@ -113,10 +115,13 @@ vigetkey(void) cmd = t_undefinedkey; if (!cmd || cmd == Th(z_sendbreak)) { + feep(); return -1; } else if (cmd == Th(z_quotedinsert)) { - if ((c = getkey(0)) == EOF) + if ((c = getkey(0)) == EOF) { + feep(); return -1; + } } else if(cmd == Th(z_viquotedinsert)) { char sav = line[cs]; @@ -124,8 +129,10 @@ vigetkey(void) zrefresh(); c = getkey(0); line[cs] = sav; - if(c == EOF) + if(c == EOF) { + feep(); return -1; + } } else if (cmd == Th(z_vicmdmode)) return -1; return c; @@ -135,7 +142,7 @@ vigetkey(void) static int getvirange(int wf) { - int pos = cs, ret = 0; + int pos = cs; int mult1 = zmult, hist1 = histline; Thingy k2; @@ -161,37 +168,39 @@ getvirange(int wf) k2 == Th(z_sendbreak)) { wordflag = 0; virangeflag = 0; + feep(); return -1; } - /* - * With k2 == bindk, the command key is repeated: - * a number of lines is used. If the function used - * returns 1, we fail. - */ - if ((k2 == bindk) ? dovilinerange() : execzlefunc(k2, zlenoargs)) - ret = -1; + if(k2 == bindk) + /* The command key is repeated: a number of lines is used. */ + dovilinerange(); + else + execzlefunc(k2, zlenoargs); if(vichgrepeat) zmult = mult1; else zmult = mult1 * zmod.tmult; - } while(prefixflag && !ret); + } while(prefixflag); wordflag = 0; virangeflag = 0; /* It is an error to use a non-movement command to delimit the * * range. We here reject the case where the command modified * * the line, or selected a different history line. */ - if (histline != hist1 || ll != lastll || memcmp(line, lastline, ll)) { + if(histline != hist1 || ll != lastll || memcmp(line, lastline, ll)) { histline = hist1; memcpy(line, lastline, ll = lastll); cs = pos; + feep(); return -1; } /* Can't handle an empty file. Also, if the movement command * * failed, or didn't move, it is an error. */ - if (!ll || (cs == pos && virangeflag != 2) || ret == -1) + if (!ll || (cs == pos && virangeflag != 2)) { + feep(); return -1; + } /* vi-match-bracket changes the value of virangeflag when * * moving to the opening bracket, meaning that we need to * @@ -224,7 +233,7 @@ getvirange(int wf) } /**/ -static int +static void dovilinerange(void) { int pos = cs, n = zmult; @@ -234,14 +243,17 @@ dovilinerange(void) * downward, otherwise upward. The repeat count gives the * * number of lines. */ vilinerange = 1; - if (!n) - return 1; + if (!n) { + feep(); + return; + } if (n > 0) { while(n-- && cs <= ll) cs = findeol() + 1; if (n != -1) { cs = pos; - return 1; + feep(); + return; } cs--; } else { @@ -249,12 +261,12 @@ dovilinerange(void) cs = findbol() - 1; if (n != 1) { cs = pos; - return 1; + feep(); + return; } cs++; } virangeflag = 2; - return 0; } /**/ @@ -297,12 +309,11 @@ viinsertbol(char **args) int videlete(char **args) { - int c2, ret = 1; + int c2; startvichange(1); if ((c2 = getvirange(0)) != -1) { forekill(c2 - cs, 0); - ret = 0; if (vilinerange && ll) { if (cs == ll) cs--; @@ -311,7 +322,7 @@ videlete(char **args) } } vichgflag = 0; - return ret; + return 0; } /**/ @@ -330,8 +341,10 @@ videletechar(char **args) return ret; } /* it is an error to be on the end of line */ - if (cs == ll || line[cs] == '\n') + if (cs == ll || line[cs] == '\n') { + feep(); return 1; + } /* Put argument into the acceptable range -- it is not an error to * * specify a greater count than the number of available characters. */ if (n > findeol() - cs) @@ -345,17 +358,16 @@ videletechar(char **args) int vichange(char **args) { - int c2, ret = 1; + int c2; startvichange(1); if ((c2 = getvirange(1)) != -1) { - ret = 0; forekill(c2 - cs, 0); selectkeymap("main", 1); viinsbegin = cs; undoing = 0; } - return ret; + return 0; } /**/ @@ -365,11 +377,15 @@ visubstitute(char **args) int n = zmult; startvichange(1); - if (n < 0) + if (n < 0) { + feep(); return 1; + } /* it is an error to be on the end of line */ - if (cs == ll || line[cs] == '\n') + if (cs == ll || line[cs] == '\n') { + feep(); return 1; + } /* Put argument into the acceptable range -- it is not an error to * * specify a greater count than the number of available characters. */ if (n > findeol() - cs) @@ -420,8 +436,10 @@ viyankeol(char **args) int x = findeol(); startvichange(-1); - if (x == cs) + if (x == cs) { + feep(); return 1; + } cut(cs, x - cs, 0); return 0; } @@ -438,6 +456,7 @@ viyankwholeline(char **args) return 1; while(n--) { if (cs > ll) { + feep(); cs = oldcs; return 1; } @@ -479,18 +498,23 @@ vireplacechars(char **args) startvichange(1); /* check argument range */ if (n < 1 || n + cs > findeol()) { - if(vichgrepeat) + if(vichgrepeat) { + int ofeep = feepflag; vigetkey(); + feepflag = ofeep; + } if(vichgflag) { free(vichgbuf); vichgbuf = NULL; vichgflag = 0; } + feep(); return 1; } /* get key */ if((ch = vigetkey()) == -1) { vichgflag = 0; + feep(); return 1; } /* do change */ @@ -513,7 +537,7 @@ int vicmdmode(char **args) { if (invicmdmode() || selectkeymap("vicmd", 0)) - return 1; + feep(); undoing = 1; vichgflag = 0; if (cs != findbol()) @@ -549,7 +573,7 @@ viopenlineabove(char **args) int vioperswapcase(char **args) { - int oldcs, c2, ret = 1; + int oldcs, c2; /* get the range */ startvichange(1); @@ -565,13 +589,12 @@ vioperswapcase(char **args) } /* go back to the first line of the range */ cs = oldcs; - ret = 0; #if 0 vifirstnonblank(); #endif } vichgflag = 0; - return ret; + return 0; } /**/ @@ -579,8 +602,10 @@ int virepeatchange(char **args) { /* make sure we have a change to repeat */ - if (!vichgbuf || vichgflag) + if (!vichgbuf || vichgflag) { + feep(); return 1; + } /* restore or update the saved count and buffer */ if (zmod.flags & MOD_MULT) { lastmod.mult = zmod.mult; @@ -612,6 +637,7 @@ viindent(char **args) vichgflag = 0; /* must be a line range */ if (!vilinerange) { + feep(); cs = oldcs; return 1; } @@ -643,6 +669,7 @@ viunindent(char **args) vichgflag = 0; /* must be a line range */ if (!vilinerange) { + feep(); cs = oldcs; return 1; } @@ -678,6 +705,7 @@ vibackwarddeletechar(char **args) /* 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() && cs - n < viinsbegin) || cs == findbol()) { + feep(); return 1; } /* Put argument into the acceptable range -- it is not an error to * @@ -693,8 +721,10 @@ vibackwarddeletechar(char **args) int vikillline(char **args) { - if (viinsbegin > cs) + if (viinsbegin > cs) { + feep(); return 1; + } backdel(cs - viinsbegin); return 0; } @@ -711,8 +741,10 @@ viputbefore(char **args) return 1; if (zmod.flags & MOD_VIBUF) buf = &vibuf[zmod.vibuf]; - if (!buf->buf) + if (!buf->buf) { + feep(); return 1; + } if(buf->flags & CUTBUFFER_LINE) { cs = findbol(); spaceinline(buf->len + 1); @@ -743,8 +775,10 @@ viputafter(char **args) return 1; if (zmod.flags & MOD_VIBUF) buf = &vibuf[zmod.vibuf]; - if (!buf->buf) + if (!buf->buf) { + feep(); return 1; + } if(buf->flags & CUTBUFFER_LINE) { cs = findeol(); spaceinline(buf->len + 1); @@ -772,8 +806,10 @@ vijoin(char **args) int x; startvichange(-1); - if ((x = findeol()) == ll) + if ((x = findeol()) == ll) { + feep(); return 1; + } cs = x + 1; for (x = 1; cs != ll && iblank(line[cs]); cs++, x++); backdel(x); @@ -830,8 +866,10 @@ visetbuffer(char **args) if ((zmod.flags & MOD_VIBUF) || (((ch = getkey(0)) < '1' || ch > '9') && - (ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z'))) + (ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z'))) { + feep(); return 1; + } if (ch >= 'A' && ch <= 'Z') /* needed in cut() */ zmod.flags |= MOD_VIAPP; else @@ -851,6 +889,7 @@ vikilleol(char **args) startvichange(-1); if (!n) { /* error -- line already empty */ + feep(); return 1; } /* delete to end of line */ @@ -902,9 +941,10 @@ viquotedinsert(char **args) zsetterm(); #endif foredel(1); - if(c < 0) + if(c < 0) { + feep(); return 1; - else + } else return selfinsert(args); } |