summaryrefslogtreecommitdiff
path: root/src/buffer_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2024-04-19 16:37:21 +1000
committerMaxime Coste <mawww@kakoune.org>2024-04-27 16:31:40 +1000
commit5fd9bb59e35ceeeb0d6661ff5fad950a85c7612a (patch)
tree718243e8d2b8f2149a71af7ecaf88930264a323d /src/buffer_manager.cc
parentaad0c7cef84990595cdb649b679063da9e8cb581 (diff)
Add buffer -matching switch
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); }))