summaryrefslogtreecommitdiff
path: root/src/buffer_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer_manager.cc')
-rw-r--r--src/buffer_manager.cc19
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); }))