summaryrefslogtreecommitdiff
path: root/src/plugins/fakevim
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2009-01-28 19:22:54 +0100
committerhjk <qtc-committer@nokia.com>2009-01-28 19:22:54 +0100
commit27c771343ecdf73564cb7f21ea1d4d102c4f4f6a (patch)
tree56bb4271d7404951b4114db1727ca6bd4ae069a9 /src/plugins/fakevim
parent3f08a9d22f6ca06d927c4a1bb8180ee98594439e (diff)
downloadqt-creator-27c771343ecdf73564cb7f21ea1d4d102c4f4f6a.tar.gz
Fixes: fakevim: rough Ctrl-O/Ctrl-I implementation
Diffstat (limited to 'src/plugins/fakevim')
-rw-r--r--src/plugins/fakevim/fakevimhandler.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 46bda9ecb9..5b6dd91051 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -348,6 +348,10 @@ public:
QPointer<QObject> m_extraData;
int m_cursorWidth;
+
+ void recordJump();
+ QList<int> m_jumpListUndo;
+ QList<int> m_jumpListRedo;
};
FakeVimHandler::Private::Private(FakeVimHandler *parent, QWidget *widget)
@@ -797,6 +801,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
m_lastSearchForward = (key == '*');
updateMiniBuffer();
search(needle, m_lastSearchForward);
+ recordJump();
} else if (key == '\'') {
m_subsubmode = TickSubSubMode;
} else if (key == '|') {
@@ -946,6 +951,11 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
moveToStartOfLine();
else
moveToFirstNonBlankOnLine();
+ } else if (key == control('i')) {
+ if (!m_jumpListRedo.isEmpty()) {
+ m_jumpListUndo.append(position());
+ m_tc.setPosition(m_jumpListRedo.takeLast());
+ }
} else if (key == 'j' || key == Key_Down) {
int savedColumn = m_desiredColumn;
if (m_submode == NoSubMode || m_submode == ZSubMode
@@ -1001,8 +1011,10 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
finishMovement();
} else if (key == 'n') {
search(lastSearchString(), m_lastSearchForward);
+ recordJump();
} else if (key == 'N') {
search(lastSearchString(), !m_lastSearchForward);
+ recordJump();
} else if (key == 'o' || key == 'O') {
recordBeginGroup();
recordMove();
@@ -1018,6 +1030,11 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
recordInsertText(QString(indentDist(), ' '));
else
recordInsertText(QString(numSpaces, ' '));
+ } else if (key == control('o')) {
+ if (!m_jumpListUndo.isEmpty()) {
+ m_jumpListRedo.append(position());
+ m_tc.setPosition(m_jumpListUndo.takeLast());
+ }
} else if (key == 'p' || key == 'P') {
recordBeginGroup();
QString text = m_registers[m_register];
@@ -1298,6 +1315,7 @@ bool FakeVimHandler::Private::handleMiniBufferModes(int key, int unmodified,
m_searchHistory.append(m_commandBuffer);
m_lastSearchForward = (m_mode == SearchForwardMode);
search(lastSearchString(), m_lastSearchForward);
+ recordJump();
}
enterCommandMode();
updateMiniBuffer();
@@ -2106,6 +2124,13 @@ void FakeVimHandler::Private::quit()
}
+void FakeVimHandler::Private::recordJump()
+{
+ m_jumpListUndo.append(position());
+ m_jumpListRedo.clear();
+ //qDebug() << m_jumpListUndo;
+}
+
///////////////////////////////////////////////////////////////////////
//
// FakeVimHandler