29#include <condition_variable>
38typedef char *rl_compentry_func_t(
const char *,
int);
39typedef int rl_command_func_t(
int,
int);
40typedef void rl_vcpfunc_t(
char *);
42typedef int (*rl_crlf_t)();
43typedef int (*rl_on_new_line_t)();
44typedef int (*rl_forced_update_display_t)();
45typedef char** (*rl_completion_matches_t)(
const char *, rl_compentry_func_t *);
46typedef int (*rl_bind_key_t)(int, rl_command_func_t *);
47typedef void (*rl_callback_handler_install_t)(
const char *, rl_vcpfunc_t *);
48typedef void (*rl_callback_read_char_t)();
49typedef void (*rl_callback_handler_remove_t)();
51typedef void (*add_history_t)(
const char *);
58 ,
public std::enable_shared_from_this<ReadLine>
61 static std::shared_ptr<ReadLine> instance();
70 bool addCommand(
const std::string& name, CommandHandler handler,
71 const std::string& desc,
const std::string& help,
72 const std::string& opts)
override;
75 void runCommand(
int argc,
char*
const *argv)
override;
78 void process(
const std::shared_ptr<AICommon::IPollLoop>& pollLoop, epoll_event event)
override;
81 std::shared_ptr<const IReadLineContext>
getContext()
const override;
83 void quit()
const override;
84 void printLn(
const char *fmt, ...)
const override;
88 static std::mutex mInstanceLock;
89 static std::shared_ptr<ReadLine> mInstance;
93 std::shared_ptr<AICommon::PollLoop> mPollLoop;
100 static rl_crlf_t _rl_crlf;
101 static rl_on_new_line_t _rl_on_new_line;
102 static rl_forced_update_display_t _rl_forced_update_display;
103 static rl_completion_matches_t _rl_completion_matches;
104 static rl_bind_key_t _rl_bind_key;
105 static rl_callback_handler_install_t _rl_callback_handler_install;
106 static rl_callback_read_char_t _rl_callback_read_char;
107 static rl_callback_handler_remove_t _rl_callback_handler_remove;
108 static add_history_t _add_history;
117 const std::vector<std::string>& args);
120 void helpCommand(
const std::shared_ptr<const IReadLineContext>& context,
121 const std::vector<std::string>& args);
122 void quitCommand(
const std::shared_ptr<const IReadLineContext>& context,
123 const std::vector<std::string>& args);
127 mutable std::mutex mQuitLock;
128 mutable std::condition_variable mQuitConditional;
135 const std::string name;
136 const CommandHandler handler;
137 const std::string desc;
138 const std::string help;
139 const std::string opts;
142 std::vector<ReadLine::ReadLineCommand> mCommands;
Definition IPollLoop.h:40
Definition IReadLine.h:34
Definition IReadLine.h:45
bool isValid() const override
Tests if the class is valid.
Definition ReadLine.cpp:144
void quitCommand(const std::shared_ptr< const IReadLineContext > &context, const std::vector< std::string > &args)
Called when the user types quit.
Definition ReadLine.cpp:651
void run() override
Run loop, blocks until quit is called.
Definition ReadLine.cpp:484
void quit() const override
Triggers an exit from the readline loop.
Definition ReadLine.cpp:543
void commandExecute(const std::string &cmdStr, const std::vector< std::string > &args)
Executes the given command, called from readline callback handler.
Definition ReadLine.cpp:397
void helpCommand(const std::shared_ptr< const IReadLineContext > &context, const std::vector< std::string > &args)
Called when the user types help.
Definition ReadLine.cpp:666
std::shared_ptr< const IReadLineContext > getContext() const override
Returns the print context.
Definition ReadLine.cpp:531
static void signalHandler(int dummy)
Signal handler for capturing ctrl-c and restoring the terminal state.
Definition ReadLine.cpp:470
static void _commandLineHandler(char *text)
Callback handler from the readline library.
Definition ReadLine.cpp:383
static char ** _completionCallback(const char *text, int start, int end)
Callback handler for the tab completion callback.
Definition ReadLine.cpp:307
void initLib()
Initialises access to the readline library.
Definition ReadLine.cpp:158
bool addCommand(const std::string &name, CommandHandler handler, const std::string &desc, const std::string &help, const std::string &opts) override
Adds a new command to the readline loop.
Definition ReadLine.cpp:628
void printLn(const char *fmt,...) const override
Prints out the message from the command handler.
Definition ReadLine.cpp:562
void process(const std::shared_ptr< AICommon::IPollLoop > &pollLoop, epoll_event event) override
Callback from the PollLoop that is listening on stdin.
Definition ReadLine.cpp:454
void printLnError(const char *fmt,...) const override
Prints out an error message from the command handler.
Definition ReadLine.cpp:580
void commandLineHandler(const char *text)
Callback handler from the readline library.
Definition ReadLine.cpp:328
static char * _commandGenerator(const char *text, int state)
Callback handler for the tab completion callback.
Definition ReadLine.cpp:292
char * commandGenerator(const char *text, int state)
Completion function for libreadline.
Definition ReadLine.cpp:253
Definition ReadLine.h:134