diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index a2fa1f830933685a126940cfa91230a99473e4d3..5caa0df6dd9849fdf360e82c3dd8056cd7737436 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -1576,7 +1576,6 @@ public: QTextBlock previousLine(const QTextBlock &block) const; // previous line (respects wrapped parts) int linesOnScreen() const; - int columnsOnScreen() const; int linesInDocument() const; // The following use all zero-based counting. @@ -3673,9 +3672,12 @@ bool FakeVimHandler::Private::handleMovement(const Input &input) setCursorPosition(&m_cursor, pos); handleStartOfLine(); } else if (g.gflag && input.is('m')) { - moveToStartOfLine(); - moveRight(qMin(columnsOnScreen() / 2, rightDist()) - 1); - setTargetColumn(); + const QPoint pos(EDITOR(viewport()->width()) / 2, EDITOR(cursorRect(m_cursor)).y()); + QTextCursor tc = EDITOR(cursorForPosition(pos)); + if (!tc.isNull()) { + m_cursor = tc; + setTargetColumn(); + } } else if (input.is('M')) { m_cursor = EDITOR(cursorForPosition(QPoint(0, EDITOR(height()) / 2))); handleStartOfLine(); @@ -6369,25 +6371,16 @@ int FakeVimHandler::Private::cursorLineOnScreen() const { if (!editor()) return 0; - QRect rect = EDITOR(cursorRect()); - return rect.y() / rect.height(); + const QRect rect = EDITOR(cursorRect(m_cursor)); + return rect.height() > 0 ? rect.y() / rect.height() : 0; } int FakeVimHandler::Private::linesOnScreen() const { if (!editor()) return 1; - QRect rect = EDITOR(cursorRect()); - return EDITOR(viewport()->height()) / rect.height(); -} - -int FakeVimHandler::Private::columnsOnScreen() const -{ - if (!editor()) - return 1; - QRect rect = EDITOR(cursorRect()); - // qDebug() << "WID: " << EDITOR(width()) << "RECT: " << rect; - return EDITOR(viewport()->width()) / rect.width(); + const int h = EDITOR(cursorRect(m_cursor)).height(); + return h > 0 ? EDITOR(viewport()->height()) / h : 1; } int FakeVimHandler::Private::cursorLine() const