diff options
author | Oliver Kiddle <opk@zsh.org> | 2016-07-08 23:00:44 +0200 |
---|---|---|
committer | Oliver Kiddle <opk@zsh.org> | 2016-07-08 23:00:44 +0200 |
commit | 13f4bb29363e2a4c6a6e2971a929bd677043d866 (patch) | |
tree | c3362a1e04593ccc1ababb6d0f639adf949b1fdb /Src/Zle | |
parent | e87aa8941fd7e13b039bf4d1664c6dc39a09313a (diff) | |
download | zsh-13f4bb29363e2a4c6a6e2971a929bd677043d866.tar.gz zsh-13f4bb29363e2a4c6a6e2971a929bd677043d866.tar.xz zsh-13f4bb29363e2a4c6a6e2971a929bd677043d866.zip |
38810: fix cursor positioning and repeated invocations when widgets used from emacs mode
Diffstat (limited to 'Src/Zle')
-rw-r--r-- | Src/Zle/textobjects.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/Src/Zle/textobjects.c b/Src/Zle/textobjects.c index 9b3277a97..3db0781ff 100644 --- a/Src/Zle/textobjects.c +++ b/Src/Zle/textobjects.c @@ -1,5 +1,5 @@ /* - * textobjects.c - ZLE module implementing Vim style text objects + * textobjects.c - ZLE widgets implementing Vim style text objects * * This file is part of zsh, the Z shell. * @@ -54,11 +54,7 @@ selectword(UNUSED(char **args)) int sclass = viclass(zleline[zlecs]); int doblanks = all && sclass; - if (!invicmdmode()) { - region_active = 1; - mark = zlecs; - } - if (!region_active || zlecs == mark) { + if (!region_active || zlecs == mark || mark == -1) { /* search back to first character of same class as the start position * also stop at the beginning of the line */ mark = zlecs; @@ -207,8 +203,12 @@ selectword(UNUSED(char **args)) /* Adjustment: vi operators don't include the cursor position, in insert * or emacs mode the region also doesn't but for vi visual mode it is * included. */ - if (zlecs && zlecs > mark && !virangeflag) - DECCS(); + if (!virangeflag) { + if (!invicmdmode()) + region_active = 1; + else if (zlecs && zlecs > mark) + DECCS(); + } return 0; } @@ -315,7 +315,7 @@ selectargument(UNUSED(char **args)) } /* Adjustment: vi operators don't include the cursor position */ - if (!virangeflag) + if (!virangeflag && invicmdmode()) DECCS(); return 0; |