diff options
author | Oliver Kiddle <opk@zsh.org> | 2014-11-15 21:33:32 +0100 |
---|---|---|
committer | Oliver Kiddle <opk@zsh.org> | 2014-11-15 21:33:32 +0100 |
commit | 1e934556f7a91cc15e78272763dab05ea16b6d78 (patch) | |
tree | e84a11d1a989bf1c551bd4a574fea5ad1b63a19b /Src/Zle/zle_word.c | |
parent | 13f3eec61dd806682141d45520fb4a08726831e0 (diff) | |
download | zsh-1e934556f7a91cc15e78272763dab05ea16b6d78.tar.gz zsh-1e934556f7a91cc15e78272763dab05ea16b6d78.tar.xz zsh-1e934556f7a91cc15e78272763dab05ea16b6d78.zip |
33697: new vim style vi-backward-word-end widgets
Diffstat (limited to 'Src/Zle/zle_word.c')
-rw-r--r-- | Src/Zle/zle_word.c | 67 |
1 files changed, 64 insertions, 3 deletions
diff --git a/Src/Zle/zle_word.c b/Src/Zle/zle_word.c index e59304ecd..301b18d4a 100644 --- a/Src/Zle/zle_word.c +++ b/Src/Zle/zle_word.c @@ -148,8 +148,13 @@ viforwardblankwordend(UNUSED(char **args)) { int n = zmult; - if (n < 0) - return 1; + if (n < 0) { + int ret; + zmult = -n; + ret = viforwardblankwordend(args); + zmult = n; + return ret; + } while (n--) { while (zlecs != zlell) { int pos = zlecs; @@ -180,7 +185,7 @@ viforwardwordend(char **args) if (n < 0) { int ret; zmult = -n; - ret = backwardword(args); + ret = vibackwardwordend(args); zmult = n; return ret; } @@ -336,6 +341,62 @@ vibackwardblankword(char **args) /**/ 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_iblank(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 +vibackwardblankwordend(char **args) +{ + int n = zmult; + + if (n < 0) { + int ret; + zmult = -n; + ret = viforwardblankwordend(args); + zmult = n; + return ret; + } + while (n--) { + while (zlecs && !ZC_iblank(zleline[zlecs])) + DECCS(); + while (zlecs && ZC_iblank(zleline[zlecs])) + DECCS(); + } + return 0; +} + +/**/ +int emacsbackwardword(char **args) { int n = zmult; |