From 13f4bb29363e2a4c6a6e2971a929bd677043d866 Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Fri, 8 Jul 2016 23:00:44 +0200 Subject: 38810: fix cursor positioning and repeated invocations when widgets used from emacs mode --- ChangeLog | 3 +++ Src/Zle/textobjects.c | 18 +++++++++--------- 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 + * 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; -- cgit 1.4.1