From a2e91361e87ddf47073a82e7a968e1ed39d277d3 Mon Sep 17 00:00:00 2001 From: Luv Khemani Date: Sat, 27 Feb 2016 11:57:12 +0800 Subject: [PATCH] Add autocomplete to bitcoin-qt's console window. https://github.com/bitcoin/bitcoin/pull/7613/commits/ce7413fcb7d28bd72e5ade7dc9756504de766fc2 --- src/qt/rpcconsole.cpp | 15 ++++++++++++++- src/qt/rpcconsole.h | 3 +++ src/rpcserver.cpp | 11 +++++++++++ src/rpcserver.h | 7 +++++++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 56c58b839..90a9806df 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #if QT_VERSION < 0x050000 #include @@ -430,7 +431,19 @@ void RPCConsole::setClientModel(ClientModel *model) ui->buildDate->setText(model->formatBuildDate()); ui->startupTime->setText(model->formatClientStartupTime()); ui->networkName->setText(QString::fromStdString(Params().NetworkIDString())); - } + + //Setup autocomplete and attach it + QStringList wordList; + std::vector commandList = tableRPC.listCommands(); + for (size_t i = 0; i < commandList.size(); ++i) + { + wordList << commandList[i].c_str(); + } + + autoCompleter = new QCompleter(wordList, this); + ui->lineEdit->setCompleter(autoCompleter); + + } } static QString categoryClass(int category) diff --git a/src/qt/rpcconsole.h b/src/qt/rpcconsole.h index 162d61cfd..5f96e51e0 100644 --- a/src/qt/rpcconsole.h +++ b/src/qt/rpcconsole.h @@ -11,6 +11,7 @@ #include "net.h" #include +#include class ClientModel; class PlatformStyle; @@ -134,6 +135,8 @@ private: RPCTimerInterface *rpcTimerInterface; QMenu *peersTableContextMenu; QMenu *banTableContextMenu; + + QCompleter *autoCompleter; }; #endif // BITCOIN_QT_RPCCONSOLE_H diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 24ba7d099..50e1c13c5 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -548,6 +548,17 @@ UniValue CRPCTable::execute(const std::string &strMethod, const UniValue ¶ms g_rpcSignals.PostCommand(*pcmd); } +std::vector CRPCTable::listCommands() const +{ + std::vector commandList; + typedef std::map commandMap; + + std::transform( mapCommands.begin(), mapCommands.end(), + std::back_inserter(commandList), + boost::bind(&commandMap::value_type::first,_1) ); + return commandList; +} + std::string HelpExampleCli(const std::string& methodname, const std::string& args) { return "> bitcoin-cli " + methodname + " " + args + "\n"; diff --git a/src/rpcserver.h b/src/rpcserver.h index 50846fd1e..c63db901b 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -142,6 +142,13 @@ public: * @throws an exception (UniValue) when an error happens. */ UniValue execute(const std::string &method, const UniValue ¶ms) const; + + /** + * Returns a list of registered commands + * @returns List of registered commands. + */ + std::vector listCommands() const; + }; extern const CRPCTable tableRPC;