summaryrefslogtreecommitdiff
path: root/Src/Zle/zle_vi.c
diff options
context:
space:
mode:
authorOliver Kiddle <okiddle@yahoo.co.uk>2014-01-31 14:01:12 +0100
committerOliver Kiddle <okiddle@yahoo.co.uk>2014-01-31 14:03:47 +0100
commita8c4ed64ee684227c0dd3142e912f7faca8bd1fb (patch)
treedc5796a80d8476315a908c2556d5c6cd43fcba0b /Src/Zle/zle_vi.c
parent779ad93490f03e0759c065618a3267d2e6f07b84 (diff)
downloadzsh-a8c4ed64ee684227c0dd3142e912f7faca8bd1fb.tar.gz
zsh-a8c4ed64ee684227c0dd3142e912f7faca8bd1fb.zip
32314: merge undo events corresponding to vi change in the vi-cmd-mode widget so undo from insert mode is useful again
Diffstat (limited to 'Src/Zle/zle_vi.c')
-rw-r--r--Src/Zle/zle_vi.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/Src/Zle/zle_vi.c b/Src/Zle/zle_vi.c
index 31f293387..9e9cc2f34 100644
--- a/Src/Zle/zle_vi.c
+++ b/Src/Zle/zle_vi.c
@@ -107,7 +107,7 @@ startvitext(int im)
{
startvichange(im);
selectkeymap("main", 1);
- undoing = 0;
+ vistartchange = (curchange && curchange->prev) ? curchange->prev->changeno : 0;
viinsbegin = zlecs;
}
@@ -399,7 +399,7 @@ vichange(UNUSED(char **args))
forekill(c2 - zlecs, CUT_RAW);
selectkeymap("main", 1);
viinsbegin = zlecs;
- undoing = 0;
+ vistartchange = curchange->prev->changeno;
}
return ret;
}
@@ -584,7 +584,13 @@ vicmdmode(UNUSED(char **args))
{
if (invicmdmode() || selectkeymap("vicmd", 0))
return 1;
- undoing = 1;
+ struct change *current = curchange->prev;
+ while (current && current->changeno > vistartchange+1) {
+ current->flags |= CH_PREV;
+ current = current->prev;
+ if (!current) break;
+ current->flags |= CH_NEXT;
+ }
vichgflag = 0;
if (zlecs != findbol())
DECCS();