diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 4a69ff97ea67da35e9c7cdf6ce011a52869a3155..72c68c1654deb39d8d48143959379e34d4319aa1 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -35,6 +35,10 @@ #include "fakevimconstants.h" +#include <coreplugin/filemanager.h> +#include <coreplugin/icore.h> +#include <texteditor/basetexteditor.h> + #include <QtCore/QDebug> #include <QtCore/QFile> #include <QtCore/QObject> @@ -220,6 +224,7 @@ public: bool m_wasReadOnly; // saves read-only state of document FakeVimHandler *q; + Core::ICore *m_core; Mode m_mode; SubMode m_submode; SubSubMode m_subsubmode; @@ -239,6 +244,7 @@ public: QString m_commandBuffer; QString m_currentFileName; + Core::IFile* m_currentFile; QString m_currentMessage; bool m_lastSearchForward; @@ -301,6 +307,8 @@ FakeVimHandler::Private::Private(FakeVimHandler *parent) m_visualMode = NoVisualMode; m_desiredColumn = 0; + m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>(); + m_config[ConfigStartOfLine] = ConfigOn; m_config[ConfigTabStop] = "8"; m_config[ConfigSmartTab] = ConfigOff; @@ -1190,12 +1198,18 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) bool exists = file.exists(); if (exists && !forced && !noArgs) { showRedMessage(tr("File '%1' exists (add ! to override)").arg(fileName)); - } else if (file.open(QIODevice::ReadWrite)) { - QTextCursor tc = selectRange(beginLine, endLine); - qDebug() << "ANCHOR: " << tc.position() << tc.anchor() - << tc.selection().toPlainText(); - { QTextStream ts(&file); ts << tc.selection().toPlainText(); } - file.close(); + } else if (m_currentFile || file.open(QIODevice::ReadWrite)) { + if(m_currentFile) { + m_core->fileManager()->blockFileChange(m_currentFile); + m_currentFile->save(fileName); + m_core->fileManager()->unblockFileChange(m_currentFile); + } else { + QTextCursor tc = selectRange(beginLine, endLine); + qDebug() << "ANCHOR: " << tc.position() << tc.anchor() + << tc.selection().toPlainText(); + { QTextStream ts(&file); ts << tc.selection().toPlainText(); } + file.close(); + } file.open(QIODevice::ReadOnly); QByteArray ba = file.readAll(); showBlackMessage(tr("\"%1\" %2 %3L, %4C written") @@ -1725,6 +1739,11 @@ void FakeVimHandler::Private::setWidget(QWidget *ob) { m_textedit = qobject_cast<QTextEdit *>(ob); m_plaintextedit = qobject_cast<QPlainTextEdit *>(ob); + TextEditor::BaseTextEditor* editor = qobject_cast<TextEditor::BaseTextEditor*>(ob); + if (editor) { + m_currentFile = editor->file(); + m_currentFileName = m_currentFile->fileName(); + } } ///////////////////////////////////////////////////////////////////////