diff options
Diffstat (limited to 'src/buffer_manager.cc')
| -rw-r--r-- | src/buffer_manager.cc | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index 45a50c3c..447b47c1 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -7,6 +7,7 @@ #include "file.hh" #include "ranges.hh" #include "string.hh" +#include "regex.hh" namespace Kakoune { @@ -79,6 +80,24 @@ Buffer& BufferManager::get_buffer(StringView name) return *res; } +Buffer* BufferManager::get_buffer_matching_ifp(const Regex& regex) +{ + for (auto& buf : m_buffers | reverse()) + { + if (StringView name = buf->name(); regex_match(name.begin(), name.end(), regex)) + return buf.get(); + } + return nullptr; +} + +Buffer& BufferManager::get_buffer_matching(const Regex& regex) +{ + Buffer* res = get_buffer_matching_ifp(regex); + if (not res) + throw runtime_error{format("no buffer matching '{}'", regex.str())}; + return *res; +} + Buffer& BufferManager::get_first_buffer() { if (all_of(m_buffers, [](auto& b) { return (b->flags() & Buffer::Flags::Debug); })) |
