From 27c771343ecdf73564cb7f21ea1d4d102c4f4f6a Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 28 Jan 2009 19:22:54 +0100 Subject: [PATCH] Fixes: fakevim: rough Ctrl-O/Ctrl-I implementation --- src/plugins/fakevim/fakevimhandler.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 46bda9ec..5b6dd910 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -348,6 +348,10 @@ public: QPointer m_extraData; int m_cursorWidth; + + void recordJump(); + QList m_jumpListUndo; + QList 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 -- 2.11.4.GIT