Add a test case for -once hooks and code style tweaks

This commit is contained in:
Maxime Coste 2018-08-16 21:09:51 +10:00
parent 4387b1ac90
commit 293610a432
6 changed files with 7 additions and 6 deletions

View File

@ -861,8 +861,8 @@ const CommandDesc add_hook_cmd = {
Regex regex{parser[2], RegexCompileFlags::Optimize}; Regex regex{parser[2], RegexCompileFlags::Optimize};
const String& command = parser[3]; const String& command = parser[3];
auto group = parser.get_switch("group").value_or(StringView{}); auto group = parser.get_switch("group").value_or(StringView{});
const auto flags = (parser.get_switch("always") ? HookFlags::Always : HookFlags::None) \ const auto flags = (parser.get_switch("always") ? HookFlags::Always : HookFlags::None) |
| (parser.get_switch("once") ? HookFlags::Once : HookFlags::None); (parser.get_switch("once") ? HookFlags::Once : HookFlags::None);
get_scope(parser[0], context).hooks().add_hook(parser[1], group.str(), flags, get_scope(parser[0], context).hooks().add_hook(parser[1], group.str(), flags,
std::move(regex), command); std::move(regex), command);
} }

View File

@ -126,10 +126,7 @@ void HookManager::run_hook(StringView hook_name, StringView param, Context& cont
if (to_run.hook->flags & HookFlags::Once) if (to_run.hook->flags & HookFlags::Once)
{ {
auto it = std::find_if(hook_list->value.begin(), hook_list->value.end(), auto it = find(hook_list->value, to_run.hook);
[&](const std::unique_ptr<Hook>& h)
{ return h.get() == to_run.hook; });
m_hooks_trash.push_back(std::move(*it)); m_hooks_trash.push_back(std::move(*it));
hook_list->value.erase(it); hook_list->value.erase(it);
} }

1
test/hooks/once/cmd Normal file
View File

@ -0,0 +1 @@
iaaa<esc>

1
test/hooks/once/in Normal file
View File

@ -0,0 +1 @@

1
test/hooks/once/out Normal file
View File

@ -0,0 +1 @@
abaa

1
test/hooks/once/rc Normal file
View File

@ -0,0 +1 @@
hook global -once InsertChar a 'exec b'