Index: autotests/src/kateview_test.h =================================================================== --- autotests/src/kateview_test.h +++ autotests/src/kateview_test.h @@ -46,6 +46,7 @@ void testFoldFirstLine(); void testDragAndDrop(); + void testGotoMatchingBracket(); }; #endif // KATE_VIEW_TEST_H Index: autotests/src/kateview_test.cpp =================================================================== --- autotests/src/kateview_test.cpp +++ autotests/src/kateview_test.cpp @@ -430,4 +430,41 @@ QCOMPARE(view->selectionRange(), Range(2, 0, 3, 0)); } +// test for bug https://bugs.kde.org/402594 +void KateViewTest::testGotoMatchingBracket() +{ + KTextEditor::DocumentPrivate doc(false, false); + doc.setText("foo(bar)baz"); + // 0123456789 + + KTextEditor::ViewPrivate *view = new KTextEditor::ViewPrivate(&doc, nullptr); + const KTextEditor::Cursor cursor1(0, 3); // Starting point on open ( + const KTextEditor::Cursor cursor2(0, 8); // Insert Mode differ slightly from... + const KTextEditor::Cursor cursor3(0, 7); // Overwrite Mode + + doc.config()->setOvr(false); // Insert Mode + + view->setCursorPosition(cursor1); + view->toMatchingBracket(); + QCOMPARE(view->cursorPosition(), cursor2); + view->toMatchingBracket(); + QCOMPARE(view->cursorPosition(), cursor1); + + // Currently has it in Insert Mode also to work when the cursor is placed inside the parentheses + view->setCursorPosition(cursor1 + KTextEditor::Cursor(0, 1)); + view->toMatchingBracket(); + QCOMPARE(view->cursorPosition(), cursor2); + view->setCursorPosition(cursor2 + KTextEditor::Cursor(0, -1)); + view->toMatchingBracket(); + QCOMPARE(view->cursorPosition(), cursor1); + + doc.config()->setOvr(true);// Overwrite Mode + + view->setCursorPosition(cursor1); + view->toMatchingBracket(); + QCOMPARE(view->cursorPosition(), cursor3); + view->toMatchingBracket(); + QCOMPARE(view->cursorPosition(), cursor1); +} + // kate: indent-mode cstyle; indent-width 4; replace-tabs on; Index: src/view/kateviewinternal.cpp =================================================================== --- src/view/kateviewinternal.cpp +++ src/view/kateviewinternal.cpp @@ -868,6 +868,10 @@ if (m_bmStart->toRange().contains(m_cursor) || m_bmStart->end() == m_cursor.toCursor()) { c = m_bmEnd->end(); + // We need to adjust the cursor positon in case of override mode, BUG-402594 + if (doc()->config()->ovr()) { + c.setColumn(c.column() - 1); + } } else if (m_bmEnd->toRange().contains(m_cursor) || m_bmEnd->end() == m_cursor.toCursor()) { c = m_bmStart->start(); } else {