summaryrefslogtreecommitdiff
path: root/src/client_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2019-04-08 21:58:12 +1000
committerMaxime Coste <mawww@kakoune.org>2019-04-08 21:59:32 +1000
commitc8839e79041ef37849a4cb8ac5017eadc8ec9653 (patch)
treeec13d3d7a7898aabab17712aae2e11ae2a752c44 /src/client_manager.cc
parent08f1a471fd8213582e3e1a85906e3ebcad3bd68e (diff)
Add a ClientCreate and ClientClose hook
As discussed in #2830. Closes #2500.
Diffstat (limited to 'src/client_manager.cc')
-rw-r--r--src/client_manager.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/client_manager.cc b/src/client_manager.cc
index 943d7963..9ca5f555 100644
--- a/src/client_manager.cc
+++ b/src/client_manager.cc
@@ -64,7 +64,9 @@ Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui, int pi
try
{
- CommandManager::instance().execute(init_cmds, client->context());
+ auto& context = client->context();
+ context.hooks().run_hook(Hook::ClientCreate, context.name(), context);
+ CommandManager::instance().execute(init_cmds, context);
}
catch (Kakoune::runtime_error& error)
{
@@ -116,10 +118,14 @@ void ClientManager::remove_client(Client& client, bool graceful, int status)
kak_assert(contains(m_client_trash, &client));
return;
}
+
client.exit(status);
m_client_trash.push_back(std::move(*it));
m_clients.erase(it);
+ auto& context = client.context();
+ context.hooks().run_hook(Hook::ClientClose, context.name(), context);
+
if (not graceful and m_clients.empty())
BufferManager::instance().backup_modified_buffers();
}