summaryrefslogtreecommitdiff
path: root/src/hook_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2018-09-12 21:24:38 +1000
committerMaxime Coste <mawww@kakoune.org>2018-09-12 21:26:21 +1000
commit0c3d9ccd20e9833abbec6f003f3fab27da27b869 (patch)
tree07485285268f31a3771879ce95b12b6faa770a9d /src/hook_manager.cc
parentb8d312cfe039721cb996cf83100630e64cd15c43 (diff)
Change remove-hooks to take a regular expression
All hooks whose group match this regex will be removed. Fixes #2380.
Diffstat (limited to 'src/hook_manager.cc')
-rw-r--r--src/hook_manager.cc6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/hook_manager.cc b/src/hook_manager.cc
index 46d38fb0..93a4fc1e 100644
--- a/src/hook_manager.cc
+++ b/src/hook_manager.cc
@@ -32,15 +32,13 @@ void HookManager::add_hook(StringView hook_name, String group, HookFlags flags,
hooks.emplace_back(new Hook{std::move(group), flags, std::move(filter), std::move(commands)});
}
-void HookManager::remove_hooks(StringView group)
+void HookManager::remove_hooks(const Regex& regex)
{
- if (group.empty())
- throw runtime_error("invalid id");
for (auto& list : m_hooks)
{
auto it = std::remove_if(list.value.begin(), list.value.end(),
[&](const std::unique_ptr<Hook>& h)
- { return h->group == group; });
+ { return regex_match(h->group.begin(), h->group.end(), regex); });
if (not m_running_hooks.empty()) // we are running some hooks, defer deletion
m_hooks_trash.insert(m_hooks_trash.end(), std::make_move_iterator(it),
std::make_move_iterator(list.value.end()));