Commit 5076be59 authored by hjk's avatar hjk
Browse files

fakevim: fix cursor position for <n>j or <n>k and end or begin of document

parent c172e9b1
...@@ -620,8 +620,9 @@ void FakeVimHandler::Private::moveDown(int n) ...@@ -620,8 +620,9 @@ void FakeVimHandler::Private::moveDown(int n)
m_tc.movePosition(Down, MoveAnchor, n); m_tc.movePosition(Down, MoveAnchor, n);
#else #else
const int col = m_tc.position() - m_tc.block().position(); const int col = m_tc.position() - m_tc.block().position();
const int line = m_tc.block().blockNumber(); const int lastLine = m_tc.document()->lastBlock().blockNumber();
const QTextBlock &block = m_tc.document()->findBlockByNumber(line + n); const int targetLine = qMax(0, qMin(lastLine, m_tc.block().blockNumber() + n));
const QTextBlock &block = m_tc.document()->findBlockByNumber(targetLine);
const int pos = block.position(); const int pos = block.position();
setPosition(pos + qMin(block.length() - 1, col)); setPosition(pos + qMin(block.length() - 1, col));
moveToTargetColumn(); moveToTargetColumn();
......
...@@ -302,6 +302,7 @@ void tst_FakeVim::command_e() ...@@ -302,6 +302,7 @@ void tst_FakeVim::command_e()
move("e", "int main(int argc, char *arg@v[])"); move("e", "int main(int argc, char *arg@v[])");
move("e", "int main(int argc, char *argv[]@)"); move("e", "int main(int argc, char *argv[]@)");
move("e", "@{"); move("e", "@{");
move("10k","@\n"); // home.
} }
void tst_FakeVim::command_i() void tst_FakeVim::command_i()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment