diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp index f04ee3b20efb60044c2afa7870cd3e2c40af2a01..03dabb6f26af45895c2ac38ccb28a942817bdf58 100644 --- a/src/plugins/fakevim/fakevim_test.cpp +++ b/src/plugins/fakevim/fakevim_test.cpp @@ -1607,6 +1607,14 @@ void FakeVimPlugin::test_vim_letter_case() // upper- and lower-case data.setText("abc DEF"); KEYS("~", "A" X "bc DEF"); + INTEGRITY(false); + KEYS("4~", "ABC d" X "EF"); + INTEGRITY(false); + + data.setText("abc DEF" N "ghi"); + KEYS("l9~", "aBC de" X "f" N "ghi"); + KEYS(".", "aBC de" X "F" N "ghi"); + KEYS("h.", "aBC dE" X "f" N "ghi"); data.setText("abc DEF"); KEYS("lv3l~", "a" X "BC dEF"); diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index e061d76e7debf48989084b918e427d5f37568e9d..b37747a3d755859bb203949c52875934b68c0ef3 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -3838,19 +3838,22 @@ bool FakeVimHandler::Private::handleNoSubMode(const Input &input) else if (input.is('U')) m_submode = UpCaseSubMode; } else { - if (!atEndOfLine()) { - beginEditBlock(); - setAnchor(); - moveRight(qMin(count(), rightDist())); - if (input.is('~')) - invertCase(currentRange()); - else if (input.is('u')) - downCase(currentRange()); - else if (input.is('U')) - upCase(currentRange()); - setDotCommand(QString::fromLatin1("%1%2").arg(count()).arg(input.raw())); - endEditBlock(); + beginEditBlock(); + if (atEndOfLine()) + moveLeft(); + setAnchor(); + moveRight(qMin(count(), rightDist())); + if (input.is('~')) { + const int pos = position(); + invertCase(currentRange()); + setPosition(pos); + } else if (input.is('u')) { + downCase(currentRange()); + } else if (input.is('U')) { + upCase(currentRange()); } + setDotCommand(QString::fromLatin1("%1%2").arg(count()).arg(input.raw())); + endEditBlock(); } } else if (input.isKey(Key_Delete)) { setAnchor(); @@ -7533,6 +7536,7 @@ void FakeVimHandler::setTextCursorPosition(int position) d->setPosition(pos); else d->setAnchorAndPosition(pos, pos); + d->m_fakeEnd = false; d->setTargetColumn(); }