diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2014-12-23 13:54:09 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2014-12-23 13:54:09 +0000 |
| commit | b6ff15aa757eb35fed5772d28e3c06b5e844a49e (patch) | |
| tree | d41ebca1b4fe4591017f5310749b263047ba9345 /src/buffer_manager.cc | |
| parent | 064fb81b8d38df3bc77e2211fb6bc5db84fedb97 (diff) | |
Unify completion from container content logic
Diffstat (limited to 'src/buffer_manager.cc')
| -rw-r--r-- | src/buffer_manager.cc | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index 400c9f5b..943a2085 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -3,6 +3,7 @@ #include "assert.hh" #include "buffer.hh" #include "client_manager.hh" +#include "containers.hh" #include "exception.hh" #include "file.hh" #include "string.hh" @@ -117,27 +118,19 @@ void BufferManager::backup_modified_buffers() CandidateList BufferManager::complete_buffer_name(StringView prefix, ByteCount cursor_pos) { - auto real_prefix = prefix.substr(0, cursor_pos); - const bool include_dirs = contains(real_prefix, '/'); - CandidateList result; - CandidateList subsequence_result; - for (auto& buffer : m_buffers) - { + const bool include_dirs = contains(prefix.substr(0, cursor_pos), '/'); + auto c = transformed(m_buffers, + [include_dirs](const safe_ptr<Buffer>& buffer) -> String { String name = buffer->display_name(); - StringView match_name = name; if (not include_dirs and buffer->flags() & Buffer::Flags::File) { ByteCount pos = name.find_last_of('/'); if (pos != (int)String::npos) - match_name = name.substr(pos+1); + return name.substr(pos+1); } - - if (prefix_match(match_name, real_prefix)) - result.push_back(name); - if (subsequence_match(name, real_prefix)) - subsequence_result.push_back(name); - } - return result.empty() ? subsequence_result : result; + return name; + }); + return complete(prefix, cursor_pos, c, prefix_match, subsequence_match); } void BufferManager::clear_buffer_trash() |
