FakeVim: Remove QtcProcess use from fakevimhandler.cpp

fakevimhandler.{h,cpp} are meant to be re-usable outside of Qt Creator.

Amends 91605c3.

Change-Id: I569a393d13049ef92ed3ef0c4f69de5232b2fa32
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
hjk
2023-05-02 09:30:37 +02:00
parent a35fe27188
commit c3a213cc65
3 changed files with 16 additions and 27 deletions

View File

@@ -36,8 +36,6 @@
#include "fakevimactions.h" #include "fakevimactions.h"
#include "fakevimtr.h" #include "fakevimtr.h"
#include <utils/qtcprocess.h>
#include <QDebug> #include <QDebug>
#include <QFile> #include <QFile>
#include <QObject> #include <QObject>
@@ -833,29 +831,6 @@ static void setClipboardData(const QString &content, RangeMode mode,
clipboard->setMimeData(data, clipboardMode); clipboard->setMimeData(data, clipboardMode);
} }
static QByteArray toLocalEncoding(const QString &text)
{
#if defined(Q_OS_WIN)
return QString(text).replace("\n", "\r\n").toLocal8Bit();
#else
return text.toLocal8Bit();
#endif
}
static QString getProcessOutput(const QString &command, const QString &input)
{
Utils::QtcProcess proc;
proc.setCommand(Utils::CommandLine::fromUserInput(command));
proc.setWriteData(toLocalEncoding(input));
proc.start();
// FIXME: Process should be interruptable by user.
// Solution is to create a QObject for each process and emit finished state.
proc.waitForFinished();
return proc.cleanedStdOut();
}
static const QMap<QString, int> &vimKeyNames() static const QMap<QString, int> &vimKeyNames()
{ {
static const QMap<QString, int> k = { static const QMap<QString, int> k = {
@@ -6432,7 +6407,8 @@ bool FakeVimHandler::Private::handleExBangCommand(const ExCommand &cmd) // :!
const QString command = QString(cmd.cmd.mid(1) + ' ' + cmd.args).trimmed(); const QString command = QString(cmd.cmd.mid(1) + ' ' + cmd.args).trimmed();
const QString input = replaceText ? selectText(cmd.range) : QString(); const QString input = replaceText ? selectText(cmd.range) : QString();
const QString result = getProcessOutput(command, input); QString result;
q->processOutput(command, input, &result);
if (replaceText) { if (replaceText) {
setCurrentRange(cmd.range); setCurrentRange(cmd.range);

View File

@@ -167,6 +167,7 @@ public:
Callback<void()> tabNextRequested; Callback<void()> tabNextRequested;
Callback<void(bool insertMode)> modeChanged; Callback<void(bool insertMode)> modeChanged;
Callback<bool()> tabPressedInInsertMode; Callback<bool()> tabPressedInInsertMode;
Callback<void(const QString &, const QString &, QString *)> processOutput;
public: public:
class Private; class Private;

View File

@@ -51,7 +51,7 @@
#include <utils/layoutbuilder.h> #include <utils/layoutbuilder.h>
#include <utils/pathchooser.h> #include <utils/pathchooser.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/qtcassert.h> #include <utils/qtcprocess.h>
#include <utils/stylehelper.h> #include <utils/stylehelper.h>
#include <cppeditor/cppeditorconstants.h> #include <cppeditor/cppeditorconstants.h>
@@ -1887,6 +1887,18 @@ void FakeVimPluginPrivate::editorOpened(IEditor *editor)
tew->invokeAssist(Completion, &runData->wordProvider); tew->invokeAssist(Completion, &runData->wordProvider);
}); });
handler->processOutput.set([](const QString &command, const QString &input, QString *output) {
QtcProcess proc;
proc.setCommand(Utils::CommandLine::fromUserInput(command));
proc.setWriteData(input.toLocal8Bit());
proc.start();
// FIXME: Process should be interruptable by user.
// Solution is to create a QObject for each process and emit finished state.
proc.waitForFinished();
*output = proc.cleanedStdOut();
});
connect(ICore::instance(), &ICore::saveSettingsRequested, connect(ICore::instance(), &ICore::saveSettingsRequested,
this, &FakeVimPluginPrivate::writeSettings); this, &FakeVimPluginPrivate::writeSettings);