diff options
| author | Maxime Coste <mawww@kakoune.org> | 2020-03-15 12:18:04 +1100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2020-03-15 12:18:04 +1100 |
| commit | 09375edf546dc2845960adb718db28bdcb220df1 (patch) | |
| tree | ee5897bd04b118d11647ebaa8abb52f6ab143c11 /src/buffer_manager.cc | |
| parent | e5aaf8c9fa309b74c3ec8207cd6d62b81770a22d (diff) | |
| parent | 0cfc398a1ae604e1961b27e2cda6b8f68add68ae (diff) | |
Merge remote-tracking branch 'occivink/arrange-buffers'
Diffstat (limited to 'src/buffer_manager.cc')
| -rw-r--r-- | src/buffer_manager.cc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index d8d4da26..8d17cc76 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -105,4 +105,29 @@ void BufferManager::clear_buffer_trash() m_buffer_trash.clear(); } +void BufferManager::arrange_buffers(ConstArrayView<String> first_ones) +{ + Vector<size_t> indices; + for (const auto& name : first_ones) + { + auto it = find_if(m_buffers, [&](auto& buf) { return buf->name() == name or buf->display_name() == name; }); + if (it == m_buffers.end()) + throw runtime_error{format("no such buffer '{}'", name)}; + size_t index = it - m_buffers.begin(); + if (contains(indices, index)) + throw runtime_error{format("buffer '{}' appears more than once", name)}; + indices.push_back(index); + } + + BufferList res; + for (size_t index : indices) + res.push_back(std::move(m_buffers[index])); + for (auto& buf : m_buffers) + { + if (buf) + res.push_back(std::move(buf)); + } + m_buffers = std::move(res); +} + } |
