diff --git a/src/script/katescriptview.h b/src/script/katescriptview.h --- a/src/script/katescriptview.h +++ b/src/script/katescriptview.h @@ -69,6 +69,10 @@ Q_INVOKABLE void align(const QJSValue &range); + Q_INVOKABLE QJSValue executeCommand(const QString &command, + const QString &args = QString(), + const QJSValue &jsrange = QJSValue()); + private: KTextEditor::ViewPrivate *m_view; QJSEngine *m_engine; diff --git a/src/script/katescriptview.cpp b/src/script/katescriptview.cpp --- a/src/script/katescriptview.cpp +++ b/src/script/katescriptview.cpp @@ -19,13 +19,17 @@ #include "katescriptview.h" +#include "kateglobal.h" #include "katedocument.h" #include "kateview.h" #include "katerenderer.h" #include "katescript.h" #include "scriptcursor.h" #include "scriptrange.h" +#include +#include + #include KateScriptView::KateScriptView(QJSEngine *engine, QObject *parent) @@ -117,3 +121,26 @@ const auto range = rangeFromScriptValue(jsrange); m_view->doc()->align (m_view, range); } + +QJSValue KateScriptView::executeCommand(const QString &command, + const QString &args, + const QJSValue &jsrange) +{ + QString message; + bool ok = false; + + const auto range = rangeFromScriptValue(jsrange); + const auto cmd = KTextEditor::EditorPrivate::self()->queryCommand(command); + if (!cmd) { + ok = false; + message = i18n("Command not found: %1", command); + } else { + const auto cmdLine = args.isEmpty() ? (command) : (command + QLatin1Char(' ') + args); + ok = cmd->exec(m_view, cmdLine, message, range); + } + + QJSValue object; + object.setProperty(QStringLiteral("ok"), ok); + object.setProperty(QStringLiteral("status"), message); + return object; +}