#ifndef command_manager_hh_INCLUDED #define command_manager_hh_INCLUDED #include #include #include #include #include "exception.hh" namespace Kakoune { struct wrong_argument_count : runtime_error { wrong_argument_count() : runtime_error("wrong argument count") {} }; typedef std::vector CommandParameters; typedef std::function Command; struct Completions { CommandParameters candidates; size_t start; size_t end; Completions(size_t start, size_t end) : start(start), end(end) {} }; class CommandManager { public: void execute(const std::string& command_line); Completions complete(const std::string& command_line, size_t cursor_pos); void register_command(const std::string& command_name, Command command); void register_command(const std::vector& command_names, Command command); private: std::unordered_map m_commands; }; } #endif // command_manager_hh_INCLUDED