diff options
| author | Maxime Coste <mawww@kakoune.org> | 2018-09-12 21:24:38 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2018-09-12 21:26:21 +1000 |
| commit | 0c3d9ccd20e9833abbec6f003f3fab27da27b869 (patch) | |
| tree | 07485285268f31a3771879ce95b12b6faa770a9d /src | |
| parent | b8d312cfe039721cb996cf83100630e64cd15c43 (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')
| -rw-r--r-- | src/commands.cc | 4 | ||||
| -rw-r--r-- | src/hook_manager.cc | 6 | ||||
| -rw-r--r-- | src/hook_manager.hh | 2 |
3 files changed, 5 insertions, 7 deletions
diff --git a/src/commands.cc b/src/commands.cc index 19c02cf6..e94fe090 100644 --- a/src/commands.cc +++ b/src/commands.cc @@ -867,7 +867,7 @@ const CommandDesc add_hook_cmd = { const CommandDesc remove_hook_cmd = { "remove-hooks", "rmhooks", - "remove-hooks <scope> <group>: remove all hooks whose group is <group>", + "remove-hooks <scope> <group>: remove all hooks whose group matches the regex <group>", ParameterDesc{ {}, ParameterDesc::Flags::None, 2, 2 }, CommandFlags::None, CommandHelper{}, @@ -888,7 +888,7 @@ const CommandDesc remove_hook_cmd = { }, [](const ParametersParser& parser, Context& context, const ShellContext&) { - get_scope(parser[0], context).hooks().remove_hooks(parser[1]); + get_scope(parser[0], context).hooks().remove_hooks(Regex{parser[1]}); } }; 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())); diff --git a/src/hook_manager.hh b/src/hook_manager.hh index 9e75c086..6da5fe30 100644 --- a/src/hook_manager.hh +++ b/src/hook_manager.hh @@ -27,7 +27,7 @@ public: void add_hook(StringView hook_name, String group, HookFlags flags, Regex filter, String commands); - void remove_hooks(StringView group); + void remove_hooks(const Regex& regex); CandidateList complete_hook_group(StringView prefix, ByteCount pos_in_token); void run_hook(StringView hook_name, StringView param, Context& context); |
