diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-12-23 22:56:33 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-12-23 22:56:33 +0000 |
| commit | 4d230e4051983d965c92f43ecc955cce1ff5da5e (patch) | |
| tree | 6a3403cb4bd0e0b8f38bf63f0a0c2a816b99d1c7 /src | |
| parent | 1d748a401726999959c9bc69e819c2fbbd97a565 (diff) | |
Support passing +<line number> parameter to specify the first buffer target line on open
Fixes #336
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.cc | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/main.cc b/src/main.cc index 6e99e12d..267eec23 100644 --- a/src/main.cc +++ b/src/main.cc @@ -413,7 +413,7 @@ int run_client(StringView session, StringView init_command) int run_server(StringView session, StringView init_command, bool ignore_kakrc, bool daemon, bool dummy_ui, - ConstArrayView<StringView> files) + ConstArrayView<StringView> files, LineCount target_line) { static bool terminate = false; if (daemon) @@ -510,6 +510,10 @@ int run_server(StringView session, StringView init_command, local_client = client_manager.create_client( create_local_ui(dummy_ui), get_env_vars(), init_command); + auto& selections = local_client->context().selections_write_only(); + auto& buffer = selections.buffer(); + selections = SelectionList(buffer, buffer.clamp(target_line)); + if (startup_error) local_client->print_status({ "error during startup, see *debug* buffer for details", @@ -732,9 +736,21 @@ int main(int argc, char* argv[]) } else { + LineCount target_line = 0; Vector<StringView> files; - for (size_t i = 0; i < parser.positional_count(); ++i) - files.emplace_back(parser[i]); + for (auto& name : parser) + { + if (not name.empty() and name[0_byte] == '+') + { + if (auto line = str_to_int_ifp(name.substr(1_byte))) + { + target_line = *line - 1; + continue; + } + } + + files.emplace_back(name); + } StringView session = parser.get_switch("s").value_or(StringView{}); try @@ -743,7 +759,7 @@ int main(int argc, char* argv[]) (bool)parser.get_switch("n"), (bool)parser.get_switch("d"), (bool)parser.get_switch("u"), - files); + files, target_line); } catch (convert_to_client_mode& convert) { |
