fakevim: implement '%' for moving between matching parentheses

This commit is contained in:
Martin Aumueller
2008-12-25 10:43:28 +01:00
committed by hjk
parent d2c031d481
commit 33721acf82
2 changed files with 28 additions and 0 deletions

View File

@@ -6,6 +6,7 @@
<url>http://www.trolltech.com/</url>
<dependencyList>
<dependency name="CppEditor" version="0.9.2"/><!-- Plugin adds items to the editor's context menu -->
<dependency name="TextEditor" version="0.9.2"/>
<dependency name="ProjectExplorer" version="0.9.2"/>
<dependency name="Core" version="0.9.2"/>
</dependencyList>

View File

@@ -669,6 +669,33 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
handleKey(c.unicode(), QString(c));
} else if (key == '=') {
m_submode = IndentSubMode;
} else if (key == '%') {
bool undoFakeEOL = false;
if (atEol()) {
m_tc.movePosition(Left, KeepAnchor, 1);
undoFakeEOL = true;
}
TextEditor::TextBlockUserData::MatchType match
= TextEditor::TextBlockUserData::matchCursorForward(&m_tc);
if (match == TextEditor::TextBlockUserData::Match) {
if (m_submode == NoSubMode || m_submode == ZSubMode || m_submode == RegisterSubMode)
m_tc.movePosition(Left, KeepAnchor, 1);
} else {
if (undoFakeEOL)
m_tc.movePosition(Right, KeepAnchor, 1);
if (match == TextEditor::TextBlockUserData::NoMatch) {
// backward matching is according to the character before the cursor
bool undoMove = false;
if (!m_tc.atBlockEnd()) {
m_tc.movePosition(Right, KeepAnchor, 1);
undoMove = true;
}
match = TextEditor::TextBlockUserData::matchCursorBackward(&m_tc);
if (match != TextEditor::TextBlockUserData::Match && undoMove)
m_tc.movePosition(Left, KeepAnchor, 1);
}
}
finishMovement();
} else if (key == 'a') {
m_mode = InsertMode;
m_lastInsertion.clear();