From 477285b93c6dacd5351780dd65c07ed9c94da932 Mon Sep 17 00:00:00 2001 From: Lukas Holecek Date: Fri, 23 Nov 2012 19:35:26 +0100 Subject: [PATCH] fakevim: Correct cursor position after yank Change-Id: I845eeebe44ed859cc96d69fbd660fce56cc1418b Reviewed-by: hjk --- src/plugins/fakevim/fakevim_test.cpp | 6 ++++++ src/plugins/fakevim/fakevimhandler.cpp | 14 +++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp index ce6526ac4ac..37749b3375e 100644 --- a/src/plugins/fakevim/fakevim_test.cpp +++ b/src/plugins/fakevim/fakevim_test.cpp @@ -1205,6 +1205,12 @@ void FakeVimPlugin::test_vim_copy_paste() data.setText("abc"); KEYS("yyp", "abc" N X "abc"); KEYS("4p", "abc" N "abc" N X "abc" N "abc" N "abc" N "abc"); + + // cursor position after yank + data.setText("ab" X "c" N "def"); + KEYS("Vjy", X "abc" N "def"); + data.setText("ab" X "c" N "def"); + KEYS("jhhy", X "abc" N "def"); } void FakeVimPlugin::test_vim_undo_redo() diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index b0436fc0965..810893a01fa 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -2605,10 +2605,18 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommandMovement) setTargetColumn(); endEditBlock(); } else if (m_submode == YankSubMode) { - setPosition(qMin(position(), anchor())); + const QTextCursor tc = cursor(); + if (m_rangemode == RangeBlockMode) { + const int pos1 = tc.block().position(); + const int pos2 = document()->findBlock(tc.anchor()).position(); + const int col = qMin(tc.position() - pos1, tc.anchor() - pos2); + setPosition(qMin(pos1, pos2) + col); + } else { + setPosition(qMin(position(), anchor())); + if (m_rangemode == RangeLineMode) + moveToStartOfLine(); + } leaveVisualMode(); - if (anchor() <= position()) - setPosition(anchor()); } else if (m_submode == InvertCaseSubMode || m_submode == UpCaseSubMode || m_submode == DownCaseSubMode) {