diff --git a/src/navigate/linereader.cpp b/src/navigate/linereader.cpp index 807845b..85cc281 100644 --- a/src/navigate/linereader.cpp +++ b/src/navigate/linereader.cpp @@ -16,14 +16,53 @@ */ #include "linereader.hpp" +#include "listdircontent.hpp" #include +#include #include #include #include #include +#include namespace din { - LineReader::LineReader() { + namespace { + char* custom_generator (const char* parText, int parState) { + static int list_index, len; + + if (not parState) { + list_index = 0; + len = std::strlen(parText); + } + return nullptr; + } + + //char* custom_generator (const char* parText, int parState) { + //} + + //char** custom_completion (const char* parText, int parStart, int parEnd) { + // char** matches = nullptr; + + // if (0 == parStart) { + // matches = rl_completion_matches(const_cast(parText), &custom_generator); + // } + // else { + // //See the hack described here: + // //http://cc.byexamples.com/2008/06/16/gnu-readline-implement-custom-auto-complete/ + // rl_bind_key('\t', &rl_abort); + // } + // return matches; + //} + } //unnamed namespace + + LineReader::LineReader (const ListDirContent* parLS) : + m_ls(parLS) + { + assert(m_ls); + + //rl_attempted_completion_function = &custom_completion; + rl_completion_entry_function = &custom_generator; + rl_bind_key('\t', &rl_complete); } std::string LineReader::read (const std::string& parMessage) { diff --git a/src/navigate/linereader.hpp b/src/navigate/linereader.hpp index 2a7b8cf..16f4370 100644 --- a/src/navigate/linereader.hpp +++ b/src/navigate/linereader.hpp @@ -21,12 +21,17 @@ #include namespace din { + class ListDirContent; + class LineReader { public: - LineReader ( void ); + explicit LineReader ( const ListDirContent* parLS ); ~LineReader ( void ) noexcept = default; std::string read ( const std::string& parMessage ); + + private: + const ListDirContent* m_ls; }; } //namespace din diff --git a/src/navigate/main.cpp b/src/navigate/main.cpp index b9f3e8b..04f1044 100644 --- a/src/navigate/main.cpp +++ b/src/navigate/main.cpp @@ -83,13 +83,13 @@ namespace { void do_navigation (din::DBSource& parDB) { const std::string prompt; - din::LineReader lines; + din::ListDirContent ls(&parDB); + din::LineReader lines(&ls); bool running = true; std::string curr_line; din::CommandProcessor proc; din::GenericPath dir_man; - din::ListDirContent ls(&parDB); proc.add_command("exit", &on_exit, 0); proc.add_command("cd", std::function(std::bind(&din::GenericPath::push_piece, &dir_man, std::placeholders::_1)), 1); proc.add_command("disconnect", std::function(std::bind(&din::DBSource::disconnect, &parDB)), 0);