From 58f596e36afd094c39b01fdb9c27ecbc89ae912d Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 6 May 2024 16:50:04 +0200 Subject: [PATCH] Lua: Add "printToOutputPane" plugin option Allows a plugin to automatically forward the "print" command to the output pane instead of only to qDebug() Change-Id: I10fb8063bc1713eaaf77368ea7f760270df190b3 Reviewed-by: Reviewed-by: David Schulz --- src/plugins/lua/luaengine.cpp | 21 +++++++++++++++++---- src/plugins/lua/luapluginspec.cpp | 5 +++++ src/plugins/lua/luapluginspec.h | 3 +++ src/plugins/lua/meta/qtc.lua | 1 + src/plugins/luatests/luatests/luatests.lua | 1 + 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/plugins/lua/luaengine.cpp b/src/plugins/lua/luaengine.cpp index a49af1a3887..a391795d285 100644 --- a/src/plugins/lua/luaengine.cpp +++ b/src/plugins/lua/luaengine.cpp @@ -5,7 +5,11 @@ #include "luapluginspec.h" +#include + #include +#include +#include #include #include @@ -95,10 +99,6 @@ expected_str LuaEngine::loadPlugin(const Utils::FilePath &path) sol::state lua; - lua["print"] = [prefix = path.fileName()](sol::variadic_args va) { - qDebug().noquote() << "[" << prefix << "]" << variadicToStringList(va).join("\t"); - }; - auto result = lua.safe_script( std::string_view(contents->data(), contents->size()), sol::script_pass_on_error, @@ -135,6 +135,19 @@ expected_str LuaEngine::prepareSetup( sol::lib::table, sol::lib::utf8); + const bool printToOutputPane = pluginSpec.printToOutputPane(); + const QString prefix = pluginSpec.filePath().fileName(); + lua["print"] = [prefix, printToOutputPane](sol::variadic_args va) { + const QString msg = variadicToStringList(va).join("\t"); + + qDebug().noquote() << "[" << prefix << "]" << msg; + if (printToOutputPane) { + static const QString p + = ansiColoredText("[" + prefix + "]", creatorTheme()->color(Theme::Token_Text_Muted)); + Core::MessageManager::writeSilently(QString("%1 %2").arg(p, msg)); + } + }; + const QString searchPath = (pluginSpec.location() / "?.lua").toUserOutput(); lua["package"]["path"] = searchPath.toStdString(); diff --git a/src/plugins/lua/luapluginspec.cpp b/src/plugins/lua/luapluginspec.cpp index 19d52dbf37e..4c4ac66d4e0 100644 --- a/src/plugins/lua/luapluginspec.cpp +++ b/src/plugins/lua/luapluginspec.cpp @@ -138,4 +138,9 @@ ExtensionSystem::IPlugin::ShutdownFlag LuaPluginSpec::stop() void LuaPluginSpec::kill() {} +bool LuaPluginSpec::printToOutputPane() const +{ + return d->pluginTable.get_or("printToOutputPane", false); +} + } // namespace Lua diff --git a/src/plugins/lua/luapluginspec.h b/src/plugins/lua/luapluginspec.h index 208aa8f196d..2d72bb53907 100644 --- a/src/plugins/lua/luapluginspec.h +++ b/src/plugins/lua/luapluginspec.h @@ -52,6 +52,9 @@ public: bool delayedInitialize() override; ExtensionSystem::IPlugin::ShutdownFlag stop() override; void kill() override; + +public: + bool printToOutputPane() const; }; } // namespace Lua diff --git a/src/plugins/lua/meta/qtc.lua b/src/plugins/lua/meta/qtc.lua index bfcfd457eb8..cc7de85f057 100644 --- a/src/plugins/lua/meta/qtc.lua +++ b/src/plugins/lua/meta/qtc.lua @@ -23,6 +23,7 @@ Qtc = {} ---@field hooks? Hooks The hooks of the plugin. ---@field Mimetypes? string XML MIME-info for registering additional or adapting built-in MIME types. ---@field JsonWizardPaths? string[] A list of paths relative to the plugin location or paths to the Qt resource system that are searched for template-based wizards. +---@field printToOutputPane? boolean Whether the `print(...)` function should print to the output pane or not. ( Default: false ) QtcPlugin = {} ---@class QtcPluginDependency diff --git a/src/plugins/luatests/luatests/luatests.lua b/src/plugins/luatests/luatests/luatests.lua index db0fb7f0c69..4d22738f3bc 100644 --- a/src/plugins/luatests/luatests/luatests.lua +++ b/src/plugins/luatests/luatests/luatests.lua @@ -17,4 +17,5 @@ return { { Name = "Lua", Version = "13.0.82", Required = true } }, setup = function() require 'tests'.setup() end, + printToOutputPane = true, } --[[@as QtcPlugin]]