summaryrefslogtreecommitdiff
path: root/src/shell_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2014-06-18 19:28:48 +0100
committerMaxime Coste <frrrwww@gmail.com>2014-06-18 19:32:13 +0100
commit9aa8c8a60a03396b7ed679537e3ed6b6de02ce8e (patch)
treeecd25237cb493f6fb11aa59bb77768bc0e7e116d /src/shell_manager.cc
parent62707aa82d407436c517f241c38eed68b5d158af (diff)
Add a %val{...} expand type
%val{name} gives access to values given in shell through $kak_<name>
Diffstat (limited to 'src/shell_manager.cc')
-rw-r--r--src/shell_manager.cc30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/shell_manager.cc b/src/shell_manager.cc
index d7caceb5..08c34160 100644
--- a/src/shell_manager.cc
+++ b/src/shell_manager.cc
@@ -108,21 +108,12 @@ String ShellManager::pipe(StringView input,
setenv(("kak_" + name).c_str(), local_var->second.c_str(), 1);
else
{
- 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())
+ try
{
- try
- {
- String value = env_var->second(name, context);
- setenv(("kak_"_str + name).c_str(), value.c_str(), 1);
- }
- catch (runtime_error&) {}
+ String value = get_val(name, context);
+ setenv(("kak_"_str + name).c_str(), value.c_str(), 1);
}
+ catch (runtime_error&) {}
}
++it;
@@ -149,4 +140,17 @@ void ShellManager::register_env_var(StringView regex,
m_env_vars.push_back({ Regex(regex.begin(), regex.end()), std::move(retriever) });
}
+String ShellManager::get_val(StringView name, const Context& context) const
+{
+ 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())
+ throw runtime_error("no such env var: " + name);
+ return env_var->second(name, context);
+}
+
}