diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-12-03 13:48:30 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-12-03 13:48:30 +0000 |
| commit | 84fc4bd6cb8e49a26af8f64866f0236f00fdefbe (patch) | |
| tree | 3bca157bd9279e6c808ff225a68252174955df81 /src | |
| parent | d09dd09b6c61ec0af0eb44273ecaad9c5b59983a (diff) | |
Support -e in filter mode to give commands to execute (executed before keys)
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.cc | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/main.cc b/src/main.cc index 5dbd908a..a0f08527 100644 --- a/src/main.cc +++ b/src/main.cc @@ -556,23 +556,26 @@ int run_server(StringView session, StringView init_command, return 0; } -int run_filter(StringView keystr, ConstArrayView<StringView> files, bool quiet) +int run_filter(StringView keystr, StringView commands, ConstArrayView<StringView> files, bool quiet) { StringRegistry string_registry; GlobalScope global_scope; ShellManager shell_manager; + CommandManager command_manager; BufferManager buffer_manager; RegisterManager register_manager; + ClientManager client_manager; register_options(); register_env_vars(); register_registers(); + register_commands(); try { auto keys = parse_keys(keystr); - auto apply_keys_to_buffer = [&](Buffer& buffer) + auto apply_to_buffer = [&](Buffer& buffer) { try { @@ -581,6 +584,10 @@ int run_filter(StringView keystr, ConstArrayView<StringView> files, bool quiet) Context::Flags::Transient }; + if (not commands.empty()) + command_manager.execute(commands, input_handler.context(), + ShellContext{}); + for (auto& key : keys) input_handler.handle_key(key); } @@ -596,7 +603,7 @@ int run_filter(StringView keystr, ConstArrayView<StringView> files, bool quiet) { Buffer* buffer = open_file_buffer(file); write_buffer_to_file(*buffer, file + ".kak-bak"); - apply_keys_to_buffer(*buffer); + apply_to_buffer(*buffer); write_buffer_to_file(*buffer, file); buffer_manager.delete_buffer(*buffer); } @@ -604,7 +611,7 @@ int run_filter(StringView keystr, ConstArrayView<StringView> files, bool quiet) { Buffer* buffer = new Buffer("*stdin*", Buffer::Flags::None, read_fd(0), InvalidTime); - apply_keys_to_buffer(*buffer); + apply_to_buffer(*buffer); write_buffer_to_fd(*buffer, 1); buffer_manager.delete_buffer(*buffer); } @@ -697,17 +704,18 @@ int main(int argc, char* argv[]) } return run_pipe(*session); } - else if (auto keys = parser.get_switch("f")) + + auto init_command = parser.get_switch("e").value_or(StringView{}); + + if (auto keys = parser.get_switch("f")) { Vector<StringView> files; for (size_t i = 0; i < parser.positional_count(); ++i) files.emplace_back(parser[i]); - return run_filter(*keys, files, (bool)parser.get_switch("q")); + return run_filter(*keys, init_command, files, (bool)parser.get_switch("q")); } - auto init_command = parser.get_switch("e").value_or(StringView{}); - if (auto server_session = parser.get_switch("c")) { for (auto opt : { "n", "s", "d" }) |
