From cccb07c7cd4faeb391547200bf3143d58f9c15ab Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Thu, 23 Jan 2014 19:36:07 +0000 Subject: [PATCH] Catch parameter errors on startup and display option informations --- src/main.cc | 12 ++++++++++++ src/parameters_parser.hh | 17 +++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/main.cc b/src/main.cc index 4a8421dc..721ee933 100644 --- a/src/main.cc +++ b/src/main.cc @@ -362,6 +362,18 @@ int main(int argc, char* argv[]) kakoune(params); } + catch (Kakoune::parameter_error& error) + { + printf("Error: %s\n" + "Valid options:\n" + " -e : execute commands on initialisation\n" + " -c : connect to the given session\n" + " -s : set session name\n" + " -d: run as a headless session (requires -s)\n" + " -n: do not source kakrc files on startup\n", + error.what()); + return -1; + } catch (Kakoune::exception& error) { on_assert_failed(("uncaught exception:\n"_str + error.what()).c_str()); diff --git a/src/parameters_parser.hh b/src/parameters_parser.hh index 2f7e5477..2230e3f2 100644 --- a/src/parameters_parser.hh +++ b/src/parameters_parser.hh @@ -12,21 +12,26 @@ namespace Kakoune using ParameterList = memoryview; -struct unknown_option : public runtime_error +struct parameter_error : public runtime_error +{ + using runtime_error::runtime_error; +}; + +struct unknown_option : public parameter_error { unknown_option(const String& name) - : runtime_error("unknown option '" + name + "'") {} + : parameter_error("unknown option '" + name + "'") {} }; -struct missing_option_value: public runtime_error +struct missing_option_value: public parameter_error { missing_option_value(const String& name) - : runtime_error("missing value for option '" + name + "'") {} + : parameter_error("missing value for option '" + name + "'") {} }; -struct wrong_argument_count : runtime_error +struct wrong_argument_count : public parameter_error { - wrong_argument_count() : runtime_error("wrong argument count") {} + wrong_argument_count() : parameter_error("wrong argument count") {} }; using OptionMap = std::unordered_map;