Expose hook params regex captures in hook_param_capture_N
This commit is contained in:
parent
2cfe3cae36
commit
055ed5ff7e
|
@ -800,6 +800,7 @@ Some of Kakoune state is available through environment variables:
|
||||||
* `kak_window_width`: width of the current kakoune window
|
* `kak_window_width`: width of the current kakoune window
|
||||||
* `kak_window_height`: height of the current kakoune window
|
* `kak_window_height`: height of the current kakoune window
|
||||||
* `kak_hook_param`: filtering text passed to the currently executing hook
|
* `kak_hook_param`: filtering text passed to the currently executing hook
|
||||||
|
* `kak_hook_param_capture_N`: text captured by the hook filter regex capture N
|
||||||
* `kak_client_env_<name>`: value of the <name> variable in the client environment.
|
* `kak_client_env_<name>`: value of the <name> variable in the client environment.
|
||||||
Example: $kak_client_env_SHELL is the SHELL variable
|
Example: $kak_client_env_SHELL is the SHELL variable
|
||||||
|
|
||||||
|
|
|
@ -101,6 +101,8 @@ informations about Kakoune's state:
|
||||||
height of the current kakoune window
|
height of the current kakoune window
|
||||||
*kak_hook_param*::
|
*kak_hook_param*::
|
||||||
filtering text passed to the currently executing hook
|
filtering text passed to the currently executing hook
|
||||||
|
*kak_hook_param_capture_N*::
|
||||||
|
text captured by the hook filter regex capture N
|
||||||
*kak_client_env_<name>*::
|
*kak_client_env_<name>*::
|
||||||
value of the *name* variable in the client environment
|
value of the *name* variable in the client environment
|
||||||
(e.g. *$kak_client_env_SHELL* is the SHELL variable)
|
(e.g. *$kak_client_env_SHELL* is the SHELL variable)
|
||||||
|
|
|
@ -800,15 +800,23 @@ const CommandDesc add_hook_cmd = {
|
||||||
if (not contains(hooks, parser[1]))
|
if (not contains(hooks, parser[1]))
|
||||||
throw runtime_error{format("Unknown hook '{}'", parser[1])};
|
throw runtime_error{format("Unknown hook '{}'", parser[1])};
|
||||||
|
|
||||||
Regex regex(parser[2], Regex::optimize | Regex::nosubs | Regex::ECMAScript);
|
Regex regex{parser[2], Regex::optimize | Regex::ECMAScript};
|
||||||
const String& command = parser[3];
|
const String& command = parser[3];
|
||||||
|
|
||||||
auto hook_func = [=](StringView param, Context& context) {
|
auto hook_func = [=](StringView param, Context& context) {
|
||||||
ScopedSetBool disable_history{context.history_disabled()};
|
ScopedSetBool disable_history{context.history_disabled()};
|
||||||
|
|
||||||
if (regex_match(param.begin(), param.end(), regex))
|
MatchResults<const char*> res;
|
||||||
|
if (regex_match(param.begin(), param.end(), res, regex))
|
||||||
|
{
|
||||||
|
EnvVarMap env_vars{ {"hook_param", param.str()} };
|
||||||
|
for (size_t i = 0; i < res.size(); ++i)
|
||||||
|
env_vars.insert({format("hook_param_capture_{}", i),
|
||||||
|
{res[i].first, res[i].second}});
|
||||||
|
|
||||||
CommandManager::instance().execute(command, context,
|
CommandManager::instance().execute(command, context,
|
||||||
{ {}, { { "hook_param", param.str() } } });
|
{ {}, std::move(env_vars) });
|
||||||
|
}
|
||||||
};
|
};
|
||||||
auto group = parser.get_switch("group").value_or(StringView{});
|
auto group = parser.get_switch("group").value_or(StringView{});
|
||||||
get_scope(parser[0], context).hooks().add_hook(parser[1], group.str(), hook_func);
|
get_scope(parser[0], context).hooks().add_hook(parser[1], group.str(), hook_func);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user