diff options
| author | 0cyn <kat@vector35.com> | 2026-04-14 05:03:15 -0400 |
|---|---|---|
| committer | Alexander Taylor <alex@vector35.com> | 2026-05-18 14:55:52 -0400 |
| commit | 297a98bff289ecde90d808f6538c2c5edf804af6 (patch) | |
| tree | 4ca5f9868354cb26f7c6ef70140e4ed0f0395944 /scriptingprovider.cpp | |
| parent | f1a688a1e7fb6d962d8c9addaaefdfd59e5dd28b (diff) | |
Argument Assist Popup
Diffstat (limited to 'scriptingprovider.cpp')
| -rw-r--r-- | scriptingprovider.cpp | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/scriptingprovider.cpp b/scriptingprovider.cpp index 4fd40879..95726d6d 100644 --- a/scriptingprovider.cpp +++ b/scriptingprovider.cpp @@ -56,12 +56,13 @@ void ScriptingOutputListener::NotifyInputReadyStateChanged(BNScriptingProviderIn ScriptingInstance::ScriptingInstance(ScriptingProvider* provider) { - BNScriptingInstanceCallbacks cb; + BNScriptingInstanceCallbacks cb = {}; cb.context = this; cb.destroyInstance = DestroyInstanceCallback; cb.externalRefTaken = nullptr; cb.externalRefReleased = nullptr; cb.executeScriptInput = ExecuteScriptInputCallback; + cb.executeScriptInputFromFilename = ExecuteScriptFromFilenameCallback; cb.cancelScriptInput = CancelScriptInputCallback; cb.releaseBinaryView = ReleaseBinaryViewCallback; cb.setCurrentBinaryView = SetCurrentBinaryViewCallback; @@ -71,6 +72,8 @@ ScriptingInstance::ScriptingInstance(ScriptingProvider* provider) cb.setCurrentSelection = SetCurrentSelectionCallback; cb.completeInput = CompleteInputCallback; cb.stop = StopCallback; + cb.canCompleteArguments = CanCompleteArgumentsCallback; + cb.completeArguments = CompleteArgumentsCallback; AddRefForRegistration(); m_object = BNInitScriptingInstance(provider->GetObject(), &cb); } @@ -96,6 +99,13 @@ BNScriptingProviderExecuteResult ScriptingInstance::ExecuteScriptInputCallback(v } +BNScriptingProviderExecuteResult ScriptingInstance::ExecuteScriptFromFilenameCallback(void* ctxt, const char* filename) +{ + CallbackRef<ScriptingInstance> instance(ctxt); + return instance->ExecuteScriptInputFromFilename(filename); +} + + void ScriptingInstance::CancelScriptInputCallback(void* ctxt) { CallbackRef<ScriptingInstance> instance(ctxt); @@ -162,6 +172,24 @@ char* ScriptingInstance::CompleteInputCallback(void* ctxt, const char* text, uin } +bool ScriptingInstance::CanCompleteArgumentsCallback(void* ctxt, const char* text) +{ + CallbackRef<ScriptingInstance> instance(ctxt); + bool result = instance->CanCompleteArguments(text); + return result; +} + + +char* ScriptingInstance::CompleteArgumentsCallback(void* ctx, const char* text, uint64_t* argumentStart) +{ + CallbackRef<ScriptingInstance> instance(ctx); + auto result = instance->CompleteArguments(text); + if (argumentStart) + *argumentStart = result.second; + return BNAllocString(result.first.c_str()); +} + + void ScriptingInstance::StopCallback(void* ctxt) { CallbackRef<ScriptingInstance> instance(ctxt); @@ -202,6 +230,18 @@ std::string ScriptingInstance::CompleteInput(const std::string&, uint64_t) } +bool ScriptingInstance::CanCompleteArguments(const std::string&) +{ + return false; +} + + +std::pair<std::string, uint64_t> ScriptingInstance::CompleteArguments(const std::string&) +{ + return {"", 0}; +} + + void ScriptingInstance::Output(const string& text) { BNNotifyOutputForScriptingInstance(m_object, text.c_str()); @@ -326,6 +366,24 @@ std::string CoreScriptingInstance::CompleteInput(const std::string& text, uint64 } +bool CoreScriptingInstance::CanCompleteArguments(const std::string& text) +{ + return BNScriptingInstanceCanCompleteArguments(m_object, text.c_str()); +} + + +std::pair<std::string, uint64_t> CoreScriptingInstance::CompleteArguments(const std::string& text) +{ + uint64_t argumentStart = 0; + char* result = BNScriptingInstanceCompleteArguments(m_object, text.c_str(), &argumentStart); + if (!result) + return {"", argumentStart}; + std::string ret = result; + BNFreeString(result); + return {ret, argumentStart}; +} + + void CoreScriptingInstance::Stop() { BNStopScriptingInstance(m_object); |
