diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 374d0655e57e9f85777f7a50565060bbc043407d..9f4618444d597b882fd2f6fec6161ef3cc897f7f 100755 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -377,6 +377,11 @@ public: // stand-alone test application to handle the command) void passUnknownExCommand(const QString &cmd); + bool isVisualMode() const { return m_visualMode != NoVisualMode; } + bool isNoVisualMode() const { return m_visualMode == NoVisualMode; } + bool isVisualCharMode() const { return m_visualMode == VisualCharMode; } + bool isVisualLineMode() const { return m_visualMode == VisualLineMode; } + bool isVisualBlockMode() const { return m_visualMode == VisualBlockMode; } public: QTextEdit *m_textedit; @@ -533,7 +538,7 @@ bool FakeVimHandler::Private::wantsOverride(QKeyEvent *ev) if (key == Key_Escape || (mods == Qt::ControlModifier && key == Key_BracketLeft)) { // Not sure this feels good. People often hit Esc several times - if (m_visualMode == NoVisualMode && m_mode == CommandMode) + if (isNoVisualMode() && m_mode == CommandMode) return false; return true; } @@ -607,8 +612,7 @@ EventResult FakeVimHandler::Private::handleEvent(QKeyEvent *ev) //endEditBlock(); // We fake vi-style end-of-line behaviour - m_fakeEnd = (atEndOfLine() && m_mode == CommandMode - && m_visualMode != VisualBlockMode); + m_fakeEnd = atEndOfLine() && m_mode == CommandMode && !isVisualBlockMode(); if (m_fakeEnd) moveLeft(); @@ -662,14 +666,14 @@ void FakeVimHandler::Private::restoreWidget() EDITOR(setCursorWidth(m_cursorWidth)); EDITOR(setOverwriteMode(false)); - if (m_visualMode == VisualLineMode) { + if (isVisualLineMode()) { m_tc = EDITOR(textCursor()); int beginLine = lineForPosition(m_marks['<']); int endLine = lineForPosition(m_marks['>']); m_tc.setPosition(firstPositionInLine(beginLine), MoveAnchor); m_tc.setPosition(lastPositionInLine(endLine), KeepAnchor); EDITOR(setTextCursor(m_tc)); - } else if (m_visualMode == VisualCharMode) { + } else if (isVisualCharMode()) { m_tc = EDITOR(textCursor()); m_tc.setPosition(m_marks['<'], MoveAnchor); m_tc.setPosition(m_marks['>'], KeepAnchor); @@ -763,7 +767,7 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand) return; } - if (m_visualMode != NoVisualMode) + if (isNoVisualMode()) m_marks['>'] = m_tc.position(); if (m_submode == ChangeSubMode) { @@ -839,7 +843,7 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand) void FakeVimHandler::Private::updateSelection() { QList<QTextEdit::ExtraSelection> selections = m_searchSelections; - if (m_visualMode != NoVisualMode) { + if (isVisualMode()) { QTextEdit::ExtraSelection sel; sel.cursor = m_tc; sel.format = m_tc.blockCharFormat(); @@ -853,17 +857,17 @@ void FakeVimHandler::Private::updateSelection() int cursorPos = m_tc.position(); int anchorPos = m_marks['<']; //qDebug() << "POS: " << cursorPos << " ANCHOR: " << anchorPos; - if (m_visualMode == VisualCharMode) { + if (isVisualCharMode()) { sel.cursor.setPosition(qMin(cursorPos, anchorPos), MoveAnchor); sel.cursor.setPosition(qMax(cursorPos, anchorPos) + 1, KeepAnchor); selections.append(sel); - } else if (m_visualMode == VisualLineMode) { + } else if (isVisualLineMode()) { sel.cursor.setPosition(qMin(cursorPos, anchorPos), MoveAnchor); sel.cursor.movePosition(StartOfLine, MoveAnchor); sel.cursor.setPosition(qMax(cursorPos, anchorPos), KeepAnchor); sel.cursor.movePosition(EndOfLine, KeepAnchor); selections.append(sel); - } else if (m_visualMode == VisualBlockMode) { + } else if (isVisualBlockMode()) { QTextCursor tc = m_tc; tc.setPosition(anchorPos); int anchorColumn = tc.columnNumber(); @@ -902,12 +906,12 @@ void FakeVimHandler::Private::updateMiniBuffer() msg = "-- PASSING -- "; } else if (!m_currentMessage.isEmpty()) { msg = m_currentMessage; - } else if (m_mode == CommandMode && m_visualMode != NoVisualMode) { - if (m_visualMode == VisualCharMode) { + } else if (m_mode == CommandMode && isVisualMode()) { + if (isVisualCharMode()) { msg = "-- VISUAL --"; - } else if (m_visualMode == VisualLineMode) { + } else if (isVisualLineMode()) { msg = "-- VISUAL LINE --"; - } else if (m_visualMode == VisualBlockMode) { + } else if (isVisualBlockMode()) { msg = "-- VISUAL BLOCK --"; } } else if (m_mode == InsertMode) { @@ -1124,7 +1128,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, enterExMode(); m_currentMessage.clear(); m_commandBuffer.clear(); - if (m_visualMode != NoVisualMode) + if (isVisualMode()) m_commandBuffer = "'<,'>"; m_commandHistory.append(QString()); m_commandHistoryIndex = m_commandHistory.size() - 1; @@ -1162,9 +1166,9 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, moveRight(qMin(count(), rightDist()) - 1); setTargetColumn(); finishMovement(); - } else if (key == '!' && m_visualMode == NoVisualMode) { + } else if (key == '!' && isNoVisualMode()) { m_submode = FilterSubMode; - } else if (key == '!' && m_visualMode != NoVisualMode) { + } else if (key == '!' && isVisualMode()) { enterExMode(); m_currentMessage.clear(); m_commandBuffer = "'<,'>!"; @@ -1207,19 +1211,19 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, replay(savedCommand, count()); enterCommandMode(); m_dotCommand = savedCommand; - } else if (key == '<' && m_visualMode == NoVisualMode) { + } else if (key == '<' && isNoVisualMode()) { m_submode = ShiftLeftSubMode; - } else if (key == '<' && m_visualMode != NoVisualMode) { + } else if (key == '<' && isVisualMode()) { shiftRegionLeft(1); leaveVisualMode(); - } else if (key == '>' && m_visualMode == NoVisualMode) { + } else if (key == '>' && isNoVisualMode()) { m_submode = ShiftRightSubMode; - } else if (key == '>' && m_visualMode != NoVisualMode) { + } else if (key == '>' && isVisualMode()) { shiftRegionRight(1); leaveVisualMode(); - } else if (key == '=' && m_visualMode == NoVisualMode) { + } else if (key == '=' && isNoVisualMode()) { m_submode = IndentSubMode; - } else if (key == '=' && m_visualMode != NoVisualMode) { + } else if (key == '=' && isVisualMode()) { indentRegion(); leaveVisualMode(); } else if (key == '%') { @@ -1247,10 +1251,10 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, m_movetype = MoveExclusive; moveToWordBoundary(true, false); finishMovement(); - } else if (key == 'c' && m_visualMode == NoVisualMode) { + } else if (key == 'c' && isNoVisualMode()) { setAnchor(); m_submode = ChangeSubMode; - } else if (key == 'c' && m_visualMode == VisualCharMode) { + } else if (key == 'c' && isVisualCharMode()) { leaveVisualMode(); m_submode = ChangeSubMode; finishMovement(); @@ -1264,7 +1268,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, finishMovement(); } else if (key == control('c')) { showBlackMessage("Type Alt-v,Alt-v to quit FakeVim mode"); - } else if (key == 'd' && m_visualMode == NoVisualMode) { + } else if (key == 'd' && isNoVisualMode()) { if (m_rangemode == RangeLineMode) { m_savedYankPosition = m_tc.position(); moveToEndOfLine(); @@ -1278,23 +1282,23 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, m_opcount = m_mvcount; m_mvcount.clear(); m_submode = DeleteSubMode; - } else if ((key == 'd' || key == 'x') && m_visualMode == VisualCharMode) { + } else if ((key == 'd' || key == 'x') && isVisualCharMode()) { leaveVisualMode(); m_submode = DeleteSubMode; finishMovement(); - } else if ((key == 'd' || key == 'x') && m_visualMode == VisualLineMode) { + } else if ((key == 'd' || key == 'x') && isVisualLineMode()) { leaveVisualMode(); m_rangemode = RangeLineMode; yankSelectedText(); removeSelectedText(); moveToFirstNonBlankOnLine(); - } else if ((key == 'd' || key == 'x') && m_visualMode == VisualBlockMode) { + } else if ((key == 'd' || key == 'x') && isVisualBlockMode()) { leaveVisualMode(); m_rangemode = RangeBlockMode; yankSelectedText(); removeSelectedText(); setPosition(qMin(position(), anchor())); - } else if (key == 'D' && m_visualMode == NoVisualMode) { + } else if (key == 'D' && isNoVisualMode()) { setAnchor(); m_submode = DeleteSubMode; moveDown(qMax(count() - 1, 0)); @@ -1303,14 +1307,14 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, setDotCommand("D"); finishMovement(); } else if ((key == 'D' || key == 'X') && - (m_visualMode == VisualCharMode || m_visualMode == VisualLineMode)) { + (isVisualCharMode() || isVisualLineMode())) { leaveVisualMode(); m_rangemode = RangeLineMode; m_submode = NoSubMode; yankSelectedText(); removeSelectedText(); moveToFirstNonBlankOnLine(); - } else if ((key == 'D' || key == 'X') && m_visualMode == VisualBlockMode) { + } else if ((key == 'D' || key == 'X') && isVisualBlockMode()) { leaveVisualMode(); m_rangemode = RangeBlockAndTailMode; yankSelectedText(); @@ -1554,7 +1558,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, finishMovement("W"); } else if (key == control('w')) { m_submode = WindowSubMode; - } else if (key == 'x' && m_visualMode == NoVisualMode) { // = "dl" + } else if (key == 'x' && isNoVisualMode()) { // = "dl" m_movetype = MoveExclusive; if (atEndOfLine()) moveLeft(); @@ -1572,7 +1576,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, } finishMovement(); } else if ((m_submode == YankSubMode && key == 'y') - || (key == 'Y' && m_visualMode == NoVisualMode)) { + || (key == 'Y' && isNoVisualMode())) { const int line = cursorLineInDocument() + 1; m_savedYankPosition = position(); setAnchor(firstPositionInLine(line)); @@ -1583,7 +1587,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, m_movetype = MoveLineWise; m_submode = YankSubMode; finishMovement(); - } else if (key == 'y' && m_visualMode == NoVisualMode) { + } else if (key == 'y' && isNoVisualMode()) { if (m_rangemode == RangeLineMode) { m_savedYankPosition = position(); setAnchor(firstPositionInLine(cursorLineInDocument() + 1)); @@ -1595,23 +1599,23 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, m_rangemode = RangeCharMode; } m_submode = YankSubMode; - } else if (key == 'y' && m_visualMode == VisualCharMode) { + } else if (key == 'y' && isVisualCharMode()) { Range range(position(), anchor(), RangeCharMode); range.endPos++; // MoveInclusive yankText(range, m_register); setPosition(qMin(position(), anchor())); leaveVisualMode(); finishMovement(); - } else if ((key == 'y' && m_visualMode == VisualLineMode) - || (key == 'Y' && m_visualMode == VisualLineMode) - || (key == 'Y' && m_visualMode == VisualCharMode)) { + } else if ((key == 'y' && isVisualLineMode()) + || (key == 'Y' && isVisualLineMode()) + || (key == 'Y' && isVisualCharMode())) { m_rangemode = RangeLineMode; yankSelectedText(); setPosition(qMin(position(), anchor())); moveToStartOfLine(); leaveVisualMode(); finishMovement(); - } else if ((key == 'y' || key == 'Y') && m_visualMode == VisualBlockMode) { + } else if ((key == 'y' || key == 'Y') && isVisualBlockMode()) { m_rangemode = RangeBlockMode; yankSelectedText(); setPosition(qMin(position(), anchor())); @@ -1650,7 +1654,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, } else if (key == Key_BracketLeft || key == Key_BracketRight) { } else if (key == Key_Escape) { - if (m_visualMode != NoVisualMode) { + if (isVisualMode()) { leaveVisualMode(); } else if (m_submode != NoSubMode) { m_submode = NoSubMode; @@ -2758,6 +2762,7 @@ void FakeVimHandler::Private::pasteText(bool afterCursor) moveToFirstNonBlankOnLine(); break; } + case RangeBlockAndTailMode: case RangeBlockMode: { beginEditBlock(); QTextBlock block = m_tc.block();