summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2018-07-19 18:42:22 +1000
committerMaxime Coste <mawww@kakoune.org>2018-07-19 18:42:22 +1000
commit56a5dc66ff37e02f92c93b7f77e2de58ef98ef4d (patch)
treebc494e3c09c4967af4ff7d64895396aa5629a1e1 /src
parentd640c321c05c8dc0f4af200a5f56f1bc37376001 (diff)
parent5543a4d58cb5ac0b052221e063df584f087b6924 (diff)
Merge remote-tracking branch 'lenormf/kill-clients-exit-code'
Diffstat (limited to 'src')
-rw-r--r--src/commands.cc32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/commands.cc b/src/commands.cc
index 2c6bdd33..2d21bb63 100644
--- a/src/commands.cc
+++ b/src/commands.cc
@@ -434,30 +434,44 @@ static void ensure_all_buffers_are_saved()
throw runtime_error(message);
}
+template<bool force>
+void kill(const ParametersParser& parser, Context& context, const ShellContext&)
+{
+ auto& client_manager = ClientManager::instance();
+
+ if (not force and client_manager.count() == 1)
+ ensure_all_buffers_are_saved();
+
+ const int status = parser.positional_count() > 0 ? str_to_int(parser[0]) : 0;
+ while (not client_manager.empty())
+ client_manager.remove_client(**client_manager.begin(), true, status);
+
+ throw kill_session{};
+}
+
const CommandDesc kill_cmd = {
"kill",
nullptr,
- "kill current session, quit all clients and server",
- no_params,
+ "kill [exit_code]: terminate the current session, the server and all clients connected"
+ "; the given integer will be used as exit code by the server and client processes",
+ { {}, ParameterDesc::Flags::SwitchesAsPositional, 0, 1 },
CommandFlags::None,
CommandHelper{},
CommandCompleter{},
- [](const ParametersParser&, Context&, const ShellContext&){
- ensure_all_buffers_are_saved();
- throw kill_session{};
- }
+ kill<false>
};
const CommandDesc force_kill_cmd = {
"kill!",
nullptr,
- "kill current session, quit all clients and server, do not check for unsaved buffers",
- no_params,
+ "kill [exit_code]: force the termination of the current session, the server and all clients connected"
+ "; the given integer will be used as exit code by the server and client processes",
+ { {}, ParameterDesc::Flags::SwitchesAsPositional, 0, 1 },
CommandFlags::None,
CommandHelper{},
CommandCompleter{},
- [](const ParametersParser&, Context&, const ShellContext&){ throw kill_session{}; }
+ kill<true>
};
template<bool force>