diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-06-25 19:40:18 +0200 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-06-25 19:40:18 +0200 |
| commit | 7fb49b183ea5caa645b76055d5531846b52f487b (patch) | |
| tree | 0f7553417071a36c0f7ab78fd16c29ab74df5b5f /src/shell_manager.cc | |
| parent | cffb895797998f18bbf80c1f1e67c44f511c51cf (diff) | |
ShellManager environment variable use a regex instead of an exact match
when a kakoune releated env var used in a shell command, the ShellManager
tries to match it with given regex and the first that matches calls its
value retriever.
For this to be useful, EnvVarRetrievers now also take the variable
name in its parameters.
Diffstat (limited to 'src/shell_manager.cc')
| -rw-r--r-- | src/shell_manager.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/shell_manager.cc b/src/shell_manager.cc index b9f65766..265a8440 100644 --- a/src/shell_manager.cc +++ b/src/shell_manager.cc @@ -78,10 +78,15 @@ String ShellManager::pipe(const String& input, setenv(("kak_" + name).c_str(), local_var->second.c_str(), 1); else { - auto env_var = m_env_vars.find(name); + auto env_var = std::find_if( + m_env_vars.begin(), m_env_vars.end(), + [&](const std::pair<Regex, EnvVarRetriever>& pair) + { return boost::regex_match(name.begin(), name.end(), + pair.first); }); + if (env_var != m_env_vars.end()) { - String value = env_var->second(context); + String value = env_var->second(name, context); setenv(("kak_" + name).c_str(), value.c_str(), 1); } } @@ -94,10 +99,10 @@ String ShellManager::pipe(const String& input, return output; } -void ShellManager::register_env_var(const String& name, +void ShellManager::register_env_var(const String& regex, EnvVarRetriever retriever) { - m_env_vars[name] = std::move(retriever); + m_env_vars.push_back({ Regex(regex.begin(), regex.end()), std::move(retriever) }); } } |
