diff options
| author | Glenn Smith <glenn@vector35.com> | 2019-07-23 23:48:05 -0400 |
|---|---|---|
| committer | Glenn Smith <glenn@vector35.com> | 2019-07-29 16:41:06 -0400 |
| commit | 53c6d163da2c10fa3643e8e105fee101b31c0396 (patch) | |
| tree | 382a8a1ecda5e4f5fbd3c09acd1a0322e9f60f0e /scriptingprovider.cpp | |
| parent | 3ab5d0ceebd853147644d6cf1100740ff929e3d2 (diff) | |
Input completion through python
Diffstat (limited to 'scriptingprovider.cpp')
| -rw-r--r-- | scriptingprovider.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/scriptingprovider.cpp b/scriptingprovider.cpp index 5e6d1a02..ed010100 100644 --- a/scriptingprovider.cpp +++ b/scriptingprovider.cpp @@ -61,6 +61,7 @@ ScriptingInstance::ScriptingInstance(ScriptingProvider* provider) cb.setCurrentBasicBlock = SetCurrentBasicBlockCallback; cb.setCurrentAddress = SetCurrentAddressCallback; cb.setCurrentSelection = SetCurrentSelectionCallback; + cb.completeInput = CompleteInputCallback; AddRefForRegistration(); m_object = BNInitScriptingInstance(provider->GetObject(), &cb); } @@ -128,6 +129,13 @@ void ScriptingInstance::SetCurrentSelectionCallback(void* ctxt, uint64_t begin, } +char* ScriptingInstance::CompleteInputCallback(void* ctxt, const char* text, uint64_t state) +{ + ScriptingInstance* instance = (ScriptingInstance*)ctxt; + return BNAllocString(instance->CompleteInput(text, state).c_str()); +} + + void ScriptingInstance::DestroyInstance() { ReleaseForRegistration(); @@ -163,6 +171,12 @@ void ScriptingInstance::SetCurrentSelection(uint64_t, uint64_t) } +std::string ScriptingInstance::CompleteInput(const std::string&, uint64_t) +{ + return ""; +} + + void ScriptingInstance::Output(const string& text) { BNNotifyOutputForScriptingInstance(m_object, text.c_str()); @@ -199,6 +213,18 @@ void ScriptingInstance::UnregisterOutputListener(ScriptingOutputListener* listen } +std::string ScriptingInstance::GetDelimiters() +{ + return BNGetScriptingInstanceDelimiters(m_object); +} + + +void ScriptingInstance::SetDelimiters(const std::string& delimiters) +{ + BNSetScriptingInstanceDelimiters(m_object, delimiters.c_str()); +} + + CoreScriptingInstance::CoreScriptingInstance(BNScriptingInstance* instance): ScriptingInstance(instance) { } @@ -246,6 +272,15 @@ void CoreScriptingInstance::SetCurrentSelection(uint64_t begin, uint64_t end) } +std::string CoreScriptingInstance::CompleteInput(const std::string& text, uint64_t state) +{ + char* result = BNScriptingInstanceCompleteInput(m_object, text.c_str(), state); + std::string ret = result; + BNFreeString(result); + return ret; +} + + ScriptingProvider::ScriptingProvider(const string& name): m_nameForRegister(name) { } |
