diff options
author | Oliver Kiddle <okiddle@yahoo.co.uk> | 2014-01-31 14:01:12 +0100 |
---|---|---|
committer | Oliver Kiddle <okiddle@yahoo.co.uk> | 2014-01-31 14:03:47 +0100 |
commit | a8c4ed64ee684227c0dd3142e912f7faca8bd1fb (patch) | |
tree | dc5796a80d8476315a908c2556d5c6cd43fcba0b /Src/Zle/zle_vi.c | |
parent | 779ad93490f03e0759c065618a3267d2e6f07b84 (diff) | |
download | zsh-a8c4ed64ee684227c0dd3142e912f7faca8bd1fb.tar.gz zsh-a8c4ed64ee684227c0dd3142e912f7faca8bd1fb.tar.xz 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.c | 12 |
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(); |