diff options
| author | Maxime Coste <mawww@kakoune.org> | 2025-07-08 10:33:56 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2025-07-08 12:07:33 +1000 |
| commit | fea08fc18d268ace4f843ec2b57cc33e36562098 (patch) | |
| tree | 0573099b42c357f6031191bcf92f0b0f44e67481 /src | |
| parent | 2823c5e94c1bad72a7a22ea37452d2390d5b1e17 (diff) | |
Remove uses of Regex in BufferManager by taking a more general filter
Diffstat (limited to 'src')
| -rw-r--r-- | src/buffer_manager.cc | 11 | ||||
| -rw-r--r-- | src/buffer_manager.hh | 5 | ||||
| -rw-r--r-- | src/commands.cc | 6 | ||||
| -rw-r--r-- | src/regex.cc | 9 |
4 files changed, 19 insertions, 12 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc index ea86beb9..539f160b 100644 --- a/src/buffer_manager.cc +++ b/src/buffer_manager.cc @@ -7,7 +7,6 @@ #include "buffer_utils.hh" #include "ranges.hh" #include "string.hh" -#include "regex.hh" namespace Kakoune { @@ -83,21 +82,21 @@ Buffer& BufferManager::get_buffer(StringView name) return *res; } -Buffer* BufferManager::get_buffer_matching_ifp(const Regex& regex) +Buffer* BufferManager::get_buffer_matching_ifp(const FunctionRef<bool (Buffer&)>& filter) { for (auto& buf : m_buffers | reverse()) { - if (StringView name = buf->name(); regex_match(name.begin(), name.end(), regex)) + if (filter(*buf)) return buf.get(); } return nullptr; } -Buffer& BufferManager::get_buffer_matching(const Regex& regex) +Buffer& BufferManager::get_buffer_matching(const FunctionRef<bool (Buffer&)>& filter) { - Buffer* res = get_buffer_matching_ifp(regex); + Buffer* res = get_buffer_matching_ifp(filter); if (not res) - throw runtime_error{format("no buffer matching '{}'", regex.str())}; + throw runtime_error{format("no buffer found")}; return *res; } diff --git a/src/buffer_manager.hh b/src/buffer_manager.hh index 5b687a7f..2b4c0b31 100644 --- a/src/buffer_manager.hh +++ b/src/buffer_manager.hh @@ -3,6 +3,7 @@ #include "buffer.hh" #include "vector.hh" +#include "utils.hh" #include <memory> @@ -28,8 +29,8 @@ public: Buffer* get_buffer_ifp(StringView name); Buffer& get_buffer(StringView name); - Buffer* get_buffer_matching_ifp(const Regex& regex); - Buffer& get_buffer_matching(const Regex& regex); + Buffer* get_buffer_matching_ifp(const FunctionRef<bool (Buffer&)>& filter); + Buffer& get_buffer_matching(const FunctionRef<bool (Buffer&)>& filter); void make_latest(Buffer& buffer); void arrange_buffers(ConstArrayView<String> first_ones); diff --git a/src/commands.cc b/src/commands.cc index 9a50fdf5..e7faf5ec 100644 --- a/src/commands.cc +++ b/src/commands.cc @@ -880,7 +880,11 @@ const CommandDesc buffer_cmd = { make_completer(menu(complete_buffer_name<true>)), [](const ParametersParser& parser, Context& context, const ShellContext&) { - Buffer& buffer = parser.get_switch("matching") ? BufferManager::instance().get_buffer_matching(Regex{parser[0]}) + Buffer& buffer = parser.get_switch("matching") ? BufferManager::instance().get_buffer_matching( + [re=Regex{parser[0]}](Buffer& buffer) { + auto name = buffer.name(); + return regex_match(name.begin(), name.end(), re); + }) : BufferManager::instance().get_buffer(parser[0]); if (&buffer != &context.buffer()) { diff --git a/src/regex.cc b/src/regex.cc index b62bdddf..e9d24be7 100644 --- a/src/regex.cc +++ b/src/regex.cc @@ -1,5 +1,4 @@ #include "regex.hh" -#include "ranges.hh" #include "string_utils.hh" namespace Kakoune @@ -14,8 +13,12 @@ Regex::Regex(StringView re, RegexCompileFlags flags) int Regex::named_capture_index(StringView name) const { - auto it = find_if(m_impl->named_captures, [&](auto& c) { return c.name == name; }); - return it != m_impl->named_captures.end() ? it->index : -1; + for (auto capture : m_impl->named_captures) + { + if (capture.name == name) + return capture.index; + } + return -1; } String option_to_string(const Regex& re, Quoting quoting) |
