diff options
| author | Maxime Coste <mawww@kakoune.org> | 2018-06-03 14:46:44 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2018-07-05 07:54:28 +1000 |
| commit | 27163106c74fdee8af923daf4345f1c90f9d8b1d (patch) | |
| tree | bae979ee43ba1dec5c6e346db310fd2f4dc03b6e /src | |
| parent | d6c6ed9bbf9185ad80f640078202c80cf1b2ae4e (diff) | |
Make register expansions expand to the full register content
Now that we have a nice standard way to express lists of strings,
registers can be fully exposed. An new $kak_main_reg_... env var
was added to provide the previous behaviour which is relied on by
doc.kak.
Diffstat (limited to 'src')
| -rw-r--r-- | src/command_manager.cc | 12 | ||||
| -rw-r--r-- | src/main.cc | 6 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/command_manager.cc b/src/command_manager.cc index c3dfc7c4..a554daa2 100644 --- a/src/command_manager.cc +++ b/src/command_manager.cc @@ -263,6 +263,16 @@ auto expand_option(Option& opt, std::false_type) return opt.get_as_strings(); } +auto expand_register(StringView reg, const Context& context, std::true_type) +{ + return join(RegisterManager::instance()[reg].get(context) | transform(quote), ' ', false); +} + +auto expand_register(StringView reg, const Context& context, std::false_type) +{ + return RegisterManager::instance()[reg].get(context) | gather<Vector<String>>(); +} + String expand_arobase(ConstArrayView<String> params, std::true_type) { return join(params, ' ', false); @@ -298,7 +308,7 @@ expand_token(const Token& token, const Context& context, const ShellContext& she return {str}; } case Token::Type::RegisterExpand: - return {context.main_sel_register_value(content).str()}; + return expand_register(content, context, IsSingle{}); case Token::Type::OptionExpand: return expand_option(context.options()[content], IsSingle{}); case Token::Type::ValExpand: diff --git a/src/main.cc b/src/main.cc index c5c962a0..cecf0d1d 100644 --- a/src/main.cc +++ b/src/main.cc @@ -133,9 +133,13 @@ static const EnvVarDesc builtin_env_vars[] = { { [](StringView name, const Context& context) { return context.options()[name.substr(4_byte)].get_as_string(); } }, { + "main_reg_", true, + [](StringView name, const Context& context) + { return context.main_sel_register_value(name.substr(9_byte)).str(); } + }, { "reg_", true, [](StringView name, const Context& context) - { return context.main_sel_register_value(name.substr(4_byte)).str(); } + { return join(RegisterManager::instance()[name.substr(4_byte)].get(context) | transform(quote), ' ', false); } }, { "client_env_", true, [](StringView name, const Context& context) |
