diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index 27187080..c3211f7c 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -36,5 +36,17 @@ Buffer* BufferManager::get_buffer(const std::string& name) return m_buffers[name].get(); } +CandidateList BufferManager::complete_buffername(const std::string& prefix, + size_t cursor_pos) +{ + std::string real_prefix = prefix.substr(0, cursor_pos); + CandidateList result; + for (auto& buffer : m_buffers) + { + if (buffer.first.substr(0, real_prefix.length()) == real_prefix) + result.push_back(buffer.first); + } + return result; +} } diff --git a/src/buffer_manager.hh b/src/buffer_manager.hh index 126b41a3..ee3473cd 100644 --- a/src/buffer_manager.hh +++ b/src/buffer_manager.hh @@ -2,6 +2,7 @@ #define buffer_manager_hh_INCLUDED #include "buffer.hh" +#include "completion.hh" #include "utils.hh" #include @@ -25,14 +26,17 @@ public: Buffer* operator->() const { return parent_type::operator*().second.get(); } }; - iterator begin() const { return iterator(m_buffers.begin()); } - iterator end() const { return iterator(m_buffers.end()); } - void register_buffer(Buffer* buffer); void delete_buffer(Buffer* buffer); + iterator begin() const { return iterator(m_buffers.begin()); } + iterator end() const { return iterator(m_buffers.end()); } + Buffer* get_buffer(const std::string& name); + CandidateList complete_buffername(const std::string& prefix, + size_t cursor_pos = std::string::npos); + private: BufferMap m_buffers; }; diff --git a/src/completion.cc b/src/completion.cc index 7e570def..936babaa 100644 --- a/src/completion.cc +++ b/src/completion.cc @@ -34,18 +34,4 @@ CandidateList complete_filename(const std::string& prefix, return result; } -CandidateList complete_buffername(const std::string& prefix, - size_t cursor_pos) -{ - std::string real_prefix = prefix.substr(0, cursor_pos); - CandidateList result; - for (auto& buffer : BufferManager::instance()) - { - if (buffer.name().substr(0, real_prefix.length()) == real_prefix) - result.push_back(buffer.name()); - } - return result; -} - - } diff --git a/src/completion.hh b/src/completion.hh index ca325155..af60ed1b 100644 --- a/src/completion.hh +++ b/src/completion.hh @@ -26,12 +26,8 @@ struct Completions CandidateList complete_filename(const std::string& prefix, size_t cursor_pos = std::string::npos); -CandidateList complete_buffername(const std::string& prefix, - size_t cursor_pos = std::string::npos); - typedef std::function Completer; - inline Completions complete_nothing(const std::string&, size_t cursor_pos) { return Completions(cursor_pos, cursor_pos); diff --git a/src/main.cc b/src/main.cc index 4646d04e..cc802111 100644 --- a/src/main.cc +++ b/src/main.cc @@ -615,7 +615,9 @@ int main(int argc, char* argv[]) command_manager.register_command(std::vector{ "w", "write" }, write_buffer, PerArgumentCommandCompleter{ complete_filename }); command_manager.register_command(std::vector{ "b", "buffer" }, show_buffer, - PerArgumentCommandCompleter { complete_buffername }); + PerArgumentCommandCompleter { + std::bind(&BufferManager::complete_buffername, &buffer_manager, _1, _2) + }); command_manager.register_command(std::vector{ "af", "addfilter" }, add_filter); command_manager.register_command(std::vector{ "rf", "rmfilter" }, rm_filter);