summaryrefslogtreecommitdiff
path: root/Src/Zle/textobjects.c
diff options
context:
space:
mode:
authorOliver Kiddle <opk@zsh.org>2016-07-08 23:00:44 +0200
committerOliver Kiddle <opk@zsh.org>2016-07-08 23:00:44 +0200
commit13f4bb29363e2a4c6a6e2971a929bd677043d866 (patch)
treec3362a1e04593ccc1ababb6d0f639adf949b1fdb /Src/Zle/textobjects.c
parente87aa8941fd7e13b039bf4d1664c6dc39a09313a (diff)
downloadzsh-13f4bb29363e2a4c6a6e2971a929bd677043d866.tar.gz
zsh-13f4bb29363e2a4c6a6e2971a929bd677043d866.zip
38810: fix cursor positioning and repeated invocations when widgets used from emacs mode
Diffstat (limited to 'Src/Zle/textobjects.c')
-rw-r--r--Src/Zle/textobjects.c18
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;