From 9b49de3ab56447efba66fbb28679fb5312b8c1b5 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Fri, 27 Jul 2018 21:05:07 +0800 Subject: [PATCH] MdEditOperations: Ctrl+U to delete till the space of block --- src/utils/veditutils.h | 1 + src/utils/vvim.cpp | 2 +- src/vmdeditoperations.cpp | 9 ++++++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/utils/veditutils.h b/src/utils/veditutils.h index fa99db10..14f17d47 100644 --- a/src/utils/veditutils.h +++ b/src/utils/veditutils.h @@ -25,6 +25,7 @@ public: // Need to call setTextCursor() to make it take effect. static void moveCursorFirstNonSpaceCharacter(QTextCursor &p_cursor, QTextCursor::MoveMode p_mode); + // Indent current block as next/previous block. // Return true if some changes have been made. // @p_cursor will be placed at the position after inserting leading spaces. diff --git a/src/utils/vvim.cpp b/src/utils/vvim.cpp index d979f17d..7f571be3 100644 --- a/src/utils/vvim.cpp +++ b/src/utils/vvim.cpp @@ -1383,7 +1383,7 @@ bool VVim::handleKeyPressEvent(int key, int modifiers, int *p_autoIndentPos) case Qt::Key_AsciiCircum: { if (modifiers == Qt::ShiftModifier) { - // ~, go to first non-space character of current line (block). + // ^, go to first non-space character of current line (block). tryGetRepeatToken(m_keys, m_tokens); if (!m_keys.isEmpty()) { // Not a valid sequence. diff --git a/src/vmdeditoperations.cpp b/src/vmdeditoperations.cpp index 833360ab..3273cdb9 100644 --- a/src/vmdeditoperations.cpp +++ b/src/vmdeditoperations.cpp @@ -565,8 +565,15 @@ bool VMdEditOperations::handleKeyU(QKeyEvent *p_event) if (cursor.atBlockStart()) { ret = cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::KeepAnchor); } else { - ret = cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor); + int indent = VEditUtils::fetchIndentation(cursor.block()); + int pib = cursor.positionInBlock(); + if (pib <= indent) { + ret = cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor); + } else { + ret = cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor, pib - indent); + } } + if (ret) { cursor.removeSelectedText(); }