diff --git a/plugins/runcommand/runcommand_config.cpp b/plugins/runcommand/runcommand_config.cpp --- a/plugins/runcommand/runcommand_config.cpp +++ b/plugins/runcommand/runcommand_config.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -137,6 +138,7 @@ QJsonObject entry; entry[QStringLiteral("name")] = name; entry[QStringLiteral("command")] = command; + entry[QStringLiteral("numArgs")] = command.count(QRegularExpression("%\\d+")); // % followed by one or more digits jsonConfig[key] = entry; } QJsonDocument document; diff --git a/plugins/runcommand/runcommandplugin.cpp b/plugins/runcommand/runcommandplugin.cpp --- a/plugins/runcommand/runcommandplugin.cpp +++ b/plugins/runcommand/runcommandplugin.cpp @@ -66,8 +66,16 @@ qCWarning(KDECONNECT_PLUGIN_RUNCOMMAND) << key << "is not a configured command"; } const QJsonObject commandJson = value.toObject(); - qCInfo(KDECONNECT_PLUGIN_RUNCOMMAND) << "Running:" << "/bin/sh" << "-c" << commandJson[QStringLiteral("command")].toString(); - QProcess::startDetached(QStringLiteral("/bin/sh"), QStringList()<< QStringLiteral("-c") << commandJson[QStringLiteral("command")].toString()); + + QString command = commandJson[QStringLiteral("command")].toString(); + QStringList args = np.get("args"); + + for (int i = 0; i < args.size(); i++) { + command = command.arg(args[i]); + } + + qCInfo(KDECONNECT_PLUGIN_RUNCOMMAND) << "Running:" << "/bin/sh" << "-c" << command; + QProcess::startDetached(QStringLiteral("/bin/sh"), QStringList()<< QStringLiteral("-c") << command); return true; } else if (np.has("setup")) { QProcess::startDetached(QStringLiteral("kcmshell5"), {QStringLiteral("kdeconnect"), QStringLiteral("--args"), QString(device()->id() + QStringLiteral(":kdeconnect_runcommand")) }); @@ -90,6 +98,7 @@ #if KCMUTILS_VERSION >= QT_VERSION_CHECK(5, 45, 0) np.set(QStringLiteral("canAddCommand"), true); #endif + np.set(QStringLiteral("argsSupported"), true); sendPacket(np); }