diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index b42c4d011e1357b8edbe72196fbc53885d41356a..08f13aec960adbcbc35b497c770227dbbd2f68d1 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -358,6 +358,7 @@ public: // extra data for '.' QString m_dotCommand; + bool m_inReplay; // true if we are executing a '.' // extra data for ';' QString m_semicolonCount; @@ -366,11 +367,11 @@ public: // history for '/' QString lastSearchString() const; - QStringList m_searchHistory; + static QStringList m_searchHistory; int m_searchHistoryIndex; // history for ':' - QStringList m_commandHistory; + static QStringList m_commandHistory; int m_commandHistoryIndex; // visual line mode @@ -403,6 +404,9 @@ public: QList<QTextEdit::ExtraSelection> m_searchSelections; }; +QStringList FakeVimHandler::Private::m_searchHistory; +QStringList FakeVimHandler::Private::m_commandHistory; + FakeVimHandler::Private::Private(FakeVimHandler *parent, QWidget *widget) { q = parent; @@ -424,8 +428,9 @@ FakeVimHandler::Private::Private(FakeVimHandler *parent, QWidget *widget) m_anchor = 0; m_savedYankPosition = 0; m_cursorWidth = EDITOR(cursorWidth()); + m_inReplay = false; -#if 1 +#if 0 // Plain m_config[ConfigStartOfLine] = ConfigOn; m_config[ConfigHlSearch] = ConfigOn; @@ -1012,9 +1017,11 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, qDebug() << "REPEATING" << m_dotCommand; QString savedCommand = m_dotCommand; m_dotCommand.clear(); + m_inReplay = true; for (int i = count(); --i >= 0; ) foreach (QChar c, savedCommand) handleKey(c.unicode(), c.unicode(), QString(c)); + m_inReplay = false; enterCommandMode(); m_dotCommand = savedCommand; } else if (key == '<' && m_visualMode == NoVisualMode) { @@ -1413,10 +1420,14 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, recordInsertText(str); recordEndGroup(); } else if (key == Key_PageDown || key == control('f')) { - moveDown(count() * (linesOnScreen() - 2)); + moveDown(count() * (linesOnScreen() - 2) - cursorLineOnScreen()); + scrollToLineInDocument(cursorLineInDocument()); + moveToFirstNonBlankOnLine(); finishMovement(); } else if (key == Key_PageUp || key == control('b')) { - moveUp(count() * (linesOnScreen() - 2)); + moveUp(count() * (linesOnScreen() - 2) + cursorLineOnScreen()); + scrollToLineInDocument(cursorLineInDocument() + linesOnScreen() - 2); + moveToFirstNonBlankOnLine(); finishMovement(); } else if (key == Key_Delete) { setAnchor(); @@ -1512,8 +1523,8 @@ EventResult FakeVimHandler::Private::handleInsertMode(int key, int, if (leftText.simplified().isEmpty()) indentRegion(text.at(0)); } - - if (text.at(0) == '.' || text.at(0) == '>') + + if (!m_inReplay) emit q->completionRequested(); } else { return EventUnhandled; diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index 8ece7de87249704273db4969c320fb9dc9780d1f..65e907cdd8f2e44432fab5798f2c9301a0249bd0 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -47,6 +47,7 @@ #include <texteditor/basetexteditor.h> #include <texteditor/basetextmark.h> +#include <texteditor/completionsupport.h> #include <texteditor/itexteditor.h> #include <texteditor/texteditorconstants.h> #include <texteditor/interactionsettings.h> @@ -244,7 +245,9 @@ void FakeVimPluginPrivate::triggerCompletions() if (!handler) return; if (BaseTextEditor *bt = qobject_cast<BaseTextEditor *>(handler->widget())) - bt->triggerCompletions(); + TextEditor::Internal::CompletionSupport::instance()-> + autoComplete(bt->editableInterface(), false); + // bt->triggerCompletions(); } void FakeVimPluginPrivate::writeFile(bool *handled, diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index 4115a49a50853b155ed20815b97609922075f05b..6ab3cd96901caadc6e28da0bee8b5d94a042b7f5 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -710,6 +710,7 @@ void testQString() str += " World "; str += " World "; str += " World "; + str.append(s); } void testQString3()