diff options
| author | Olivier Perret <Olivier.Perret@mailbox.org> | 2020-02-24 09:41:46 +0100 |
|---|---|---|
| committer | Olivier Perret <Olivier.Perret@mailbox.org> | 2020-02-24 09:41:46 +0100 |
| commit | 5c116ab850cc13c9b8bbed1d590022dd97a05cf3 (patch) | |
| tree | e1fa008cfe5bb33ffac9e6470de7d7e63432d37c /src/buffer_manager.cc | |
| parent | 93a889bd44ceb5d3d4656d251ddbbd4a88b3fe1b (diff) | |
Add a new 'arrange-buffers' to let users change the order of the buflist
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); +} + } |
