summaryrefslogtreecommitdiff
path: root/scriptingprovider.cpp
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2019-07-23 23:48:05 -0400
committerGlenn Smith <glenn@vector35.com>2019-07-29 16:41:06 -0400
commit53c6d163da2c10fa3643e8e105fee101b31c0396 (patch)
tree382a8a1ecda5e4f5fbd3c09acd1a0322e9f60f0e /scriptingprovider.cpp
parent3ab5d0ceebd853147644d6cf1100740ff929e3d2 (diff)
Input completion through python
Diffstat (limited to 'scriptingprovider.cpp')
-rw-r--r--scriptingprovider.cpp35
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)
{
}