diff options
Diffstat (limited to 'contrib/epee')
-rw-r--r-- | contrib/epee/include/console_handler.h | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/contrib/epee/include/console_handler.h b/contrib/epee/include/console_handler.h index e780ad4de..a3b2d30eb 100644 --- a/contrib/epee/include/console_handler.h +++ b/contrib/epee/include/console_handler.h @@ -293,13 +293,13 @@ namespace epee } template<class t_server, class chain_handler> - bool run(t_server* psrv, chain_handler ch_handler, const std::string& prompt = "#", const std::string& usage = "") + bool run(t_server* psrv, chain_handler ch_handler, std::function<std::string(void)> prompt, const std::string& usage = "") { return run(prompt, usage, [&](const std::string& cmd) { return ch_handler(psrv, cmd); }, [&] { psrv->send_stop_signal(); }); } template<class chain_handler> - bool run(chain_handler ch_handler, const std::string& prompt = "#", const std::string& usage = "", std::function<void(void)> exit_handler = NULL) + bool run(chain_handler ch_handler, std::function<std::string(void)> prompt, const std::string& usage = "", std::function<void(void)> exit_handler = NULL) { return run(prompt, usage, [&](const std::string& cmd) { return ch_handler(cmd); }, exit_handler); } @@ -312,18 +312,19 @@ namespace epee void print_prompt() { - if (!m_prompt.empty()) + std::string prompt = m_prompt(); + if (!prompt.empty()) { #ifdef HAVE_READLINE - std::string color_prompt = "\001\033[1;33m\002" + m_prompt; - if (' ' != m_prompt.back()) + std::string color_prompt = "\001\033[1;33m\002" + prompt; + if (' ' != prompt.back()) color_prompt += " "; color_prompt += "\001\033[0m\002"; m_stdin_reader.get_readline_buffer().set_prompt(color_prompt); #else epee::set_console_color(epee::console_color_yellow, true); - std::cout << m_prompt; - if (' ' != m_prompt.back()) + std::cout << prompt; + if (' ' != prompt.back()) std::cout << ' '; epee::reset_console_color(); std::cout.flush(); @@ -333,7 +334,7 @@ namespace epee private: template<typename t_cmd_handler> - bool run(const std::string& prompt, const std::string& usage, const t_cmd_handler& cmd_handler, std::function<void(void)> exit_handler) + bool run(std::function<std::string(void)> prompt, const std::string& usage, const t_cmd_handler& cmd_handler, std::function<void(void)> exit_handler) { bool continue_handle = true; m_prompt = prompt; @@ -394,7 +395,7 @@ namespace epee private: async_stdin_reader m_stdin_reader; std::atomic<bool> m_running = {true}; - std::string m_prompt; + std::function<std::string(void)> m_prompt; }; @@ -516,19 +517,23 @@ namespace epee std::unique_ptr<boost::thread> m_console_thread; async_console_handler m_console_handler; public: - bool start_handling(const std::string& prompt, const std::string& usage_string = "", std::function<void(void)> exit_handler = NULL) + bool start_handling(std::function<std::string(void)> prompt, const std::string& usage_string = "", std::function<void(void)> exit_handler = NULL) { m_console_thread.reset(new boost::thread(boost::bind(&console_handlers_binder::run_handling, this, prompt, usage_string, exit_handler))); m_console_thread->detach(); return true; } + bool start_handling(const std::string &prompt, const std::string& usage_string = "", std::function<void(void)> exit_handler = NULL) + { + return start_handling([prompt](){ return prompt; }, usage_string, exit_handler); + } void stop_handling() { m_console_handler.stop(); } - bool run_handling(const std::string& prompt, const std::string& usage_string, std::function<void(void)> exit_handler = NULL) + bool run_handling(std::function<std::string(void)> prompt, const std::string& usage_string, std::function<void(void)> exit_handler = NULL) { return m_console_handler.run(boost::bind(&console_handlers_binder::process_command_str, this, _1), prompt, usage_string, exit_handler); } |