forked from qt-creator/qt-creator
fakevim: implement '%' for moving between matching parentheses
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user