diff options
| author | Maxime Coste <mawww@kakoune.org> | 2019-04-08 21:58:12 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2019-04-08 21:59:32 +1000 |
| commit | c8839e79041ef37849a4cb8ac5017eadc8ec9653 (patch) | |
| tree | ec13d3d7a7898aabab17712aae2e11ae2a752c44 /src/client_manager.cc | |
| parent | 08f1a471fd8213582e3e1a85906e3ebcad3bd68e (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.cc | 8 |
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(); } |
