From 5c116ab850cc13c9b8bbed1d590022dd97a05cf3 Mon Sep 17 00:00:00 2001 From: Olivier Perret Date: Mon, 24 Feb 2020 09:41:46 +0100 Subject: Add a new 'arrange-buffers' to let users change the order of the buflist --- src/buffer_manager.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/buffer_manager.cc') 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 first_ones) +{ + Vector 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); +} + } -- cgit v1.2.3