diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 65333413d2014046beed9dd0e5807adab466548f..d8cbeff59e4e526896d48f55d5b641d46ada8aea 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -893,6 +893,13 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, moveDown(qMax(count() - 1, 0)); moveRight(rightDist()); finishMovement(); + } else if (key == control('d')) { + int sline = cursorLineOnScreen(); + // FIXME: this should use the "scroll" option, and "count" + moveDown(linesOnScreen() / 2); + moveToFirstNonBlankOnLine(); + scrollToLineInDocument(cursorLineInDocument() - sline); + finishMovement(); } else if (key == 'e') { m_moveType = MoveInclusive; moveToWordBoundary(false, true); @@ -1068,6 +1075,13 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, // FIXME: this is non-vim, but as Ctrl-R is taken globally // we have a substitute here redo(); + } else if (key == control('u')) { + int sline = cursorLineOnScreen(); + // FIXME: this should use the "scroll" option, and "count" + moveUp(linesOnScreen() / 2); + moveToFirstNonBlankOnLine(); + scrollToLineInDocument(cursorLineInDocument() - sline); + finishMovement(); } else if (key == 'v') { enterVisualMode(VisualCharMode); } else if (key == 'V') { @@ -1137,20 +1151,6 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, } recordInsertText(str); recordEndGroup(); - } else if (key == control('d')) { - int sline = cursorLineOnScreen(); - // FIXME: this should use the "scroll" option, and "count" - moveDown(linesOnScreen() / 2); - moveToFirstNonBlankOnLine(); - scrollToLineInDocument(cursorLineInDocument() - sline); - finishMovement(); - } else if (key == control('u')) { - int sline = cursorLineOnScreen(); - // FIXME: this should use the "scroll" option, and "count" - moveUp(linesOnScreen() / 2); - moveToFirstNonBlankOnLine(); - scrollToLineInDocument(cursorLineInDocument() - sline); - finishMovement(); } else if (key == Key_PageDown || key == control('f')) { moveDown(count() * (linesOnScreen() - 2)); finishMovement(); @@ -1588,6 +1588,7 @@ void FakeVimHandler::Private::search(const QString &needle0, bool forward) if (EDITOR(find(needle, flags))) { m_tc = EDITOR(textCursor()); m_tc.setPosition(m_tc.anchor()); + // making this unconditional feels better, but is not "vim like" if (oldLine != cursorLineInDocument() - cursorLineOnScreen()) scrollToLineInDocument(cursorLineInDocument() - linesOnScreen() / 2); return; diff --git a/tests/manual/fakevim/main.cpp b/tests/manual/fakevim/main.cpp index 2de37c1073315bc5f10696423a74782d2027e1c2..a78453528a2193f94b59966f0fc1120537e2e884 100644 --- a/tests/manual/fakevim/main.cpp +++ b/tests/manual/fakevim/main.cpp @@ -17,8 +17,8 @@ class Proxy : public QObject Q_OBJECT public: - Proxy(QWidget *widget, QObject *parent = 0) - : QObject(parent), m_widget(widget) + Proxy(QWidget *widget, QMainWindow *mw, QObject *parent = 0) + : QObject(parent), m_widget(widget), m_mainWindow(mw) {} public slots: @@ -30,13 +30,35 @@ public slots: ed->setExtraSelections(s); } + void changeStatusData(const QString &info) + { + m_statusData = info; + updateStatusBar(); + } + + void changeStatusMessage(const QString &info) + { + m_statusMessage = info; + updateStatusBar(); + } + void changeExtraInformation(const QString &info) { QMessageBox::information(m_widget, "Information", info); } + + void updateStatusBar() + { + int slack = 80 - m_statusMessage.size() - m_statusData.size(); + QString msg = m_statusMessage + QString(slack, QChar(' ')) + m_statusData; + m_mainWindow->statusBar()->showMessage(msg); + } private: QWidget *m_widget; + QMainWindow *m_mainWindow; + QString m_statusMessage; + QString m_statusData; }; int main(int argc, char *argv[]) @@ -64,11 +86,11 @@ int main(int argc, char *argv[]) //widget->resize(450, 350); widget->setFocus(); - Proxy proxy(widget); + QMainWindow mw; + Proxy proxy(widget, &mw); FakeVimHandler handler(widget, 0); - QMainWindow mw; mw.setWindowTitle("Fakevim (" + title + ")"); mw.setCentralWidget(widget); mw.resize(600, 650); @@ -85,15 +107,16 @@ int main(int argc, char *argv[]) mw.statusBar()->setFont(font); QObject::connect(&handler, SIGNAL(commandBufferChanged(QString)), - mw.statusBar(), SLOT(showMessage(QString))); + &proxy, SLOT(changeStatusMessage(QString))); QObject::connect(&handler, SIGNAL(quitRequested()), &app, SLOT(quit())); QObject::connect(&handler, SIGNAL(selectionChanged(QList<QTextEdit::ExtraSelection>)), &proxy, SLOT(changeSelection(QList<QTextEdit::ExtraSelection>))); - QObject::connect(&handler, - SIGNAL(extraInformationChanged(QString)), + QObject::connect(&handler, SIGNAL(extraInformationChanged(QString)), &proxy, SLOT(changeExtraInformation(QString))); + QObject::connect(&handler, SIGNAL(statusDataChanged(QString)), + &proxy, SLOT(changeStatusData(QString))); handler.setupWidget(); if (args.size() >= 1)