summaryrefslogtreecommitdiff
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
parente87aa8941fd7e13b039bf4d1664c6dc39a09313a (diff)
downloadzsh-13f4bb29363e2a4c6a6e2971a929bd677043d866.tar.gz
zsh-13f4bb29363e2a4c6a6e2971a929bd677043d866.zip
38810: fix cursor positioning and repeated invocations when widgets used from emacs mode
-rw-r--r--ChangeLog3
-rw-r--r--Src/Zle/textobjects.c18
2 files changed, 12 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index f220cbc82..8e02253c5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2016-07-08 Oliver Kiddle <opk@zsh.org>
+ * 38810: Src/Zle/textobjects.c: fix cursor positioning
+ and repeated invocations when widgets used from emacs mode
+
* 38809: Src/zsh.h, Src/prompt.c, Src/Zle/zle_refresh.c:
fix tracking of colour attributes and restore them when
turning bold off
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;