From e51ef6c3c29ca23c342776a19bdb9bcfc257875d Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Thu, 22 Oct 2015 13:48:57 +0100 Subject: Wrap the shell params en env vars in a ShellContext struct --- src/command_manager.cc | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) (limited to 'src/command_manager.cc') diff --git a/src/command_manager.cc b/src/command_manager.cc index a554d35d..8c3a6454 100644 --- a/src/command_manager.cc +++ b/src/command_manager.cc @@ -323,8 +323,7 @@ TokenList parse(StringView line) } String expand_token(const Token& token, const Context& context, - ConstArrayView shell_params, - const EnvVarMap& env_vars) + const ShellContext& shell_context) { auto& content = token.content(); switch (token.type()) @@ -332,20 +331,20 @@ String expand_token(const Token& token, const Context& context, case Token::Type::ShellExpand: return ShellManager::instance().eval(content, context, {}, ShellManager::Flags::WaitForStdout, - shell_params, env_vars).first; + shell_context).first; case Token::Type::RegisterExpand: return context.main_sel_register_value(content).str(); case Token::Type::OptionExpand: return context.options()[content].get_as_string(); case Token::Type::ValExpand: { - auto it = env_vars.find(content); - if (it != env_vars.end()) + auto it = shell_context.env_vars.find(content); + if (it != shell_context.env_vars.end()) return it->value; return ShellManager::instance().get_val(content, context); } case Token::Type::RawEval: - return expand(content, context, shell_params, env_vars); + return expand(content, context, shell_context); case Token::Type::Raw: case Token::Type::RawQuoted: return content; @@ -357,8 +356,7 @@ String expand_token(const Token& token, const Context& context, } String expand(StringView str, const Context& context, - ConstArrayView shell_params, - const EnvVarMap& env_vars) + const ShellContext& shell_context) { Reader reader{str}; String res; @@ -380,7 +378,7 @@ String expand(StringView str, const Context& context, { res += reader.substr_from(beg); Token token = parse_percent_token(reader); - res += expand_token(token, context, shell_params, env_vars); + res += expand_token(token, context, shell_context); beg = (++reader).pos; } else @@ -431,9 +429,7 @@ void CommandManager::execute_single_command(CommandParameters params, } void CommandManager::execute(StringView command_line, - Context& context, - ConstArrayView shell_params, - const EnvVarMap& env_vars) + Context& context, const ShellContext& shell_context) { TokenList tokens = parse(command_line); if (tokens.empty()) @@ -455,8 +451,7 @@ void CommandManager::execute(StringView command_line, else if (it->type() == Token::Type::ShellExpand) { auto shell_tokens = parse(expand_token(*it, context, - shell_params, - env_vars)); + shell_context)); it = tokens.erase(it); for (Token& token : shell_tokens) it = ++tokens.emplace(it, std::move(token)); @@ -467,8 +462,7 @@ void CommandManager::execute(StringView command_line, it -= shell_tokens.size() + 1; } else - params.push_back(expand_token(*it, context, shell_params, - env_vars)); + params.push_back(expand_token(*it, context, shell_context)); } execute_single_command(params, context, command_coord); } -- cgit v1.2.3 From da7fc3311fba98bde4fbc3457fdbf2503fd2b4d0 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Thu, 22 Oct 2015 13:59:23 +0100 Subject: Pass ShellContext to commands Fix #427 --- src/command_manager.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/command_manager.cc') diff --git a/src/command_manager.cc b/src/command_manager.cc index 8c3a6454..0c8613f2 100644 --- a/src/command_manager.cc +++ b/src/command_manager.cc @@ -405,6 +405,7 @@ CommandManager::find_command(const Context& context, const String& name) const void CommandManager::execute_single_command(CommandParameters params, Context& context, + const ShellContext& shell_context, CharCoord pos) const { if (params.empty()) @@ -419,7 +420,7 @@ void CommandManager::execute_single_command(CommandParameters params, { ParametersParser parameter_parser(param_view, command_it->second.param_desc); - command_it->second.command(parameter_parser, context); + command_it->second.command(parameter_parser, context, shell_context); } catch (runtime_error& error) { @@ -444,7 +445,7 @@ void CommandManager::execute(StringView command_line, if (it->type() == Token::Type::CommandSeparator) { - execute_single_command(params, context, command_coord); + execute_single_command(params, context, shell_context, command_coord); params.clear(); } // Shell expand are retokenized @@ -464,7 +465,7 @@ void CommandManager::execute(StringView command_line, else params.push_back(expand_token(*it, context, shell_context)); } - execute_single_command(params, context, command_coord); + execute_single_command(params, context, shell_context, command_coord); } CommandInfo CommandManager::command_info(const Context& context, StringView command_line) const -- cgit v1.2.3 From 5118e13aeef461bbaf2b86cb5d46331b9cacc061 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 23 Oct 2015 13:34:37 +0100 Subject: Remove useless std::move --- src/command_manager.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/command_manager.cc') diff --git a/src/command_manager.cc b/src/command_manager.cc index 0c8613f2..03621184 100644 --- a/src/command_manager.cc +++ b/src/command_manager.cc @@ -310,7 +310,7 @@ TokenList parse(StringView line) if (not str.empty()) result.emplace_back(Token::Type::Raw, start, reader.pos, - coord, std::move(unescape(str, "%", '\\'))); + coord, unescape(str, "%", '\\')); } if (is_command_separator(*reader)) -- cgit v1.2.3