summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-12-19 18:56:47 +0100
committerMaxime Coste <frrrwww@gmail.com>2012-12-19 18:56:47 +0100
commit2ab9b474beadcb6b7a53bd15856ff91ec26fa575 (patch)
tree8d51ac70ca83866c009d80d02c2c270b8fd644b3 /src
parent6c901e9152dbfd226d57479e0ccacb62f37a762a (diff)
Client: catch errors when executing init commands
Diffstat (limited to 'src')
-rw-r--r--src/client_manager.cc17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/client_manager.cc b/src/client_manager.cc
index 6cb5cd75..cf9a02a6 100644
--- a/src/client_manager.cc
+++ b/src/client_manager.cc
@@ -15,7 +15,22 @@ void ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
InputHandler* input_handler = &m_clients.back()->input_handler;
Context* context = &m_clients.back()->context;
- CommandManager::instance().execute(init_commands, *context);
+
+ try
+ {
+ CommandManager::instance().execute(init_commands, *context);
+ }
+ catch (Kakoune::runtime_error& error)
+ {
+ context->print_status(error.description());
+ }
+ catch (Kakoune::client_removed&)
+ {
+ m_clients.pop_back();
+ close(event_fd);
+ return;
+ }
+
EventManager::instance().watch(event_fd, [input_handler, context, this](int fd) {
try
{