Add readline support to cli

This PR adds readline support to the daemon and monero-wallet-cli. Only
GNU readline is supported (e.g. not libedit) and there are cmake checks
to ensure this.

There is a cmake variable, Readline_ROOT_DIR that can specify a
directory to find readline, otherwise some default paths are searched.

There is also a cmake option, USE_READLINE, that defaults to ON. If set
to ON, if readline is not found, the build continues but without
readline support.

One negative side effect of using readline is that the color prompt in
the wallet-cli now has no color and just uses terminal default. I know
how to fix this but it's quite a big change so will tackle another time.
This commit is contained in:
jethro 2017-05-29 18:39:49 -04:00
parent 421a6d0340
commit e1f3dfccc8
8 changed files with 376 additions and 1 deletions

View file

@ -37,6 +37,10 @@
#include "cryptonote_config.h"
#include "string_tools.h"
#ifdef HAVE_READLINE
#include "readline_buffer.h"
#endif
namespace command_line
{
namespace
@ -49,6 +53,9 @@ namespace command_line
std::string input_line(const std::string& prompt)
{
#ifdef HAVE_READLINE
rdln::suspend_readline pause_readline;
#endif
std::cout << prompt;
std::string buf;

View file

@ -42,6 +42,10 @@
#include <unistd.h>
#endif
#ifdef HAVE_READLINE
#include "readline_buffer.h"
#endif
namespace
{
#if defined(_WIN32)
@ -238,6 +242,9 @@ namespace tools
boost::optional<password_container> password_container::prompt(const bool verify, const char *message)
{
#ifdef HAVE_READLINE
rdln::suspend_readline pause_readline;
#endif
password_container pass1{};
password_container pass2{};
if (is_cin_tty() ? read_from_tty(verify, message, pass1.m_password, pass2.m_password) : read_from_file(pass1.m_password))