connect(&_process, &QProcess::readyReadStandardOutput, this, &ExecWrapper::processReadStdout);
connect(&_process, &QProcess::readyReadStandardError, this, &ExecWrapper::processReadStderr);
connect(&_process, selectOverload<int, QProcess::ExitStatus>(&QProcess::finished), this, &ExecWrapper::processFinished);
connect(&_process, &QProcess::readyReadStandardOutput, this, &ExecWrapper::processReadStdout);
connect(&_process, &QProcess::readyReadStandardError, this, &ExecWrapper::processReadStderr);
connect(&_process, selectOverload<int, QProcess::ExitStatus>(&QProcess::finished), this, &ExecWrapper::processFinished);
connect(&_process, selectOverload<QProcess::ProcessError>(&QProcess::error), this, &ExecWrapper::processError);
connect(&_process, selectOverload<QProcess::ProcessError>(&QProcess::error), this, &ExecWrapper::processError);
connect(this, &ExecWrapper::output, this, &ExecWrapper::postStdout);
connect(this, &ExecWrapper::error, this, &ExecWrapper::postStderr);
connect(this, &ExecWrapper::output, this, &ExecWrapper::postStdout);
connect(this, &ExecWrapper::error, this, &ExecWrapper::postStderr);
- QRegExp rx(R"(^\s*(\S+)(\s+(.*))?$)");
- if (!rx.exactMatch(command)) {
+ QStringList params;
+
+ static const QRegularExpression rx{R"(^\s*(\S+)(\s+(.*))?$)"};
+ auto match = rx.match(command);
+ if (!match.hasMatch()) {
- _scriptName = rx.cap(1);
- params = rx.cap(3);
+ _scriptName = match.captured(1);
+ static const QRegularExpression splitRx{"\\s+"};
+ params = match.captured(3).split(splitRx, QString::SkipEmptyParts);
foreach (QString scriptDir, Quassel::scriptDirPaths()) {
QString fileName = scriptDir + _scriptName;
if (!QFile::exists(fileName))
continue;
_process.setWorkingDirectory(scriptDir);
foreach (QString scriptDir, Quassel::scriptDirPaths()) {
QString fileName = scriptDir + _scriptName;
if (!QFile::exists(fileName))
continue;
_process.setWorkingDirectory(scriptDir);