From be7bdecd0a0a8299670d482fd1e8a773cba307e6 Mon Sep 17 00:00:00 2001 From: Yufan You Date: Mon, 20 Feb 2023 08:28:59 +0800 Subject: [PATCH 1/2] fix: move to first non-blank char on QKeySequence::MoveToStartOfLine --- src/internal/QCodeEditor.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/internal/QCodeEditor.cpp b/src/internal/QCodeEditor.cpp index b9ba92b..f5f4831 100644 --- a/src/internal/QCodeEditor.cpp +++ b/src/internal/QCodeEditor.cpp @@ -848,6 +848,21 @@ void QCodeEditor::keyPressEvent(QKeyEvent *e) setTextCursor(cursor); } + if (e->matches(QKeySequence::MoveToStartOfLine)) + { + auto cursor = textCursor(); + auto line = cursor.block().text(); + auto leadingSpaceCount = QRegularExpression("^\\s*").match(line).capturedLength(); + auto cursorPos = cursor.positionInBlock(); + if (cursorPos > leadingSpaceCount) + cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::MoveAnchor, + cursorPos - leadingSpaceCount); + else + cursor.movePosition(QTextCursor::StartOfBlock); + setTextCursor(cursor); + return; + } + QTextEdit::keyPressEvent(e); } From e74d4fd6dfb83105e8b2aabe617550dd59cfae66 Mon Sep 17 00:00:00 2001 From: Yufan You Date: Mon, 20 Feb 2023 09:07:19 +0800 Subject: [PATCH 2/2] fix: fix Shift+Home and End with line wrap --- src/internal/QCodeEditor.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/internal/QCodeEditor.cpp b/src/internal/QCodeEditor.cpp index f5f4831..39fb559 100644 --- a/src/internal/QCodeEditor.cpp +++ b/src/internal/QCodeEditor.cpp @@ -848,21 +848,34 @@ void QCodeEditor::keyPressEvent(QKeyEvent *e) setTextCursor(cursor); } + auto shift = e->modifiers().testFlag(Qt::ShiftModifier); + e->setModifiers(e->modifiers() & ~Qt::ShiftModifier); // to match MoveToStartOfLine + if (e->matches(QKeySequence::MoveToStartOfLine)) { auto cursor = textCursor(); auto line = cursor.block().text(); auto leadingSpaceCount = QRegularExpression("^\\s*").match(line).capturedLength(); auto cursorPos = cursor.positionInBlock(); + auto moveMode = shift ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor; if (cursorPos > leadingSpaceCount) - cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::MoveAnchor, - cursorPos - leadingSpaceCount); + cursor.movePosition(QTextCursor::PreviousCharacter, moveMode, cursorPos - leadingSpaceCount); else - cursor.movePosition(QTextCursor::StartOfBlock); + cursor.movePosition(QTextCursor::StartOfBlock, moveMode); + setTextCursor(cursor); + return; + } + + if (e->matches(QKeySequence::MoveToEndOfLine)) + { + auto cursor = textCursor(); + cursor.movePosition(QTextCursor::EndOfBlock, shift ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor); setTextCursor(cursor); return; } + e->setModifiers(e->modifiers() | (shift ? Qt::ShiftModifier : Qt::NoModifier)); + QTextEdit::keyPressEvent(e); }