Add a ClientCreate and ClientClose hook
As discussed in #2830. Closes #2500.
This commit is contained in:
parent
08f1a471fd
commit
c8839e7904
|
@ -140,6 +140,13 @@ name. Hooks with no description will always use an empty string.
|
||||||
executed when a fifo buffer closes its fifo file descriptor either
|
executed when a fifo buffer closes its fifo file descriptor either
|
||||||
because the buffer is being deleted or the writing end has been closed
|
because the buffer is being deleted or the writing end has been closed
|
||||||
|
|
||||||
|
*ClientCreate* `client name`::
|
||||||
|
executed when a new client is created.
|
||||||
|
|
||||||
|
*ClientClose* `client name`::
|
||||||
|
executed when a client is closed, after it was removed from the client
|
||||||
|
list.
|
||||||
|
|
||||||
*RuntimeError* `error message`::
|
*RuntimeError* `error message`::
|
||||||
an error was encountered while executing a user command
|
an error was encountered while executing a user command
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,9 @@ Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui, int pi
|
||||||
|
|
||||||
try
|
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)
|
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));
|
kak_assert(contains(m_client_trash, &client));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
client.exit(status);
|
client.exit(status);
|
||||||
m_client_trash.push_back(std::move(*it));
|
m_client_trash.push_back(std::move(*it));
|
||||||
m_clients.erase(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())
|
if (not graceful and m_clients.empty())
|
||||||
BufferManager::instance().backup_modified_buffers();
|
BufferManager::instance().backup_modified_buffers();
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,8 @@ enum class Hook
|
||||||
BufCloseFifo,
|
BufCloseFifo,
|
||||||
BufReadFifo,
|
BufReadFifo,
|
||||||
BufSetOption,
|
BufSetOption,
|
||||||
|
ClientCreate,
|
||||||
|
ClientClose,
|
||||||
InsertBegin,
|
InsertBegin,
|
||||||
InsertChar,
|
InsertChar,
|
||||||
InsertDelete,
|
InsertDelete,
|
||||||
|
@ -60,7 +62,7 @@ enum class Hook
|
||||||
|
|
||||||
constexpr auto enum_desc(Meta::Type<Hook>)
|
constexpr auto enum_desc(Meta::Type<Hook>)
|
||||||
{
|
{
|
||||||
return make_array<EnumDesc<Hook>, 39>({
|
return make_array<EnumDesc<Hook>, 41>({
|
||||||
{Hook::BufCreate, "BufCreate"},
|
{Hook::BufCreate, "BufCreate"},
|
||||||
{Hook::BufNewFile, "BufNewFile"},
|
{Hook::BufNewFile, "BufNewFile"},
|
||||||
{Hook::BufOpenFile, "BufOpenFile"},
|
{Hook::BufOpenFile, "BufOpenFile"},
|
||||||
|
@ -72,6 +74,8 @@ constexpr auto enum_desc(Meta::Type<Hook>)
|
||||||
{Hook::BufCloseFifo, "BufCloseFifo"},
|
{Hook::BufCloseFifo, "BufCloseFifo"},
|
||||||
{Hook::BufReadFifo, "BufReadFifo"},
|
{Hook::BufReadFifo, "BufReadFifo"},
|
||||||
{Hook::BufSetOption, "BufSetOption"},
|
{Hook::BufSetOption, "BufSetOption"},
|
||||||
|
{Hook::ClientCreate, "ClientCreate"},
|
||||||
|
{Hook::ClientClose, "ClientClose"},
|
||||||
{Hook::InsertBegin, "InsertBegin"},
|
{Hook::InsertBegin, "InsertBegin"},
|
||||||
{Hook::InsertChar, "InsertChar"},
|
{Hook::InsertChar, "InsertChar"},
|
||||||
{Hook::InsertDelete, "InsertDelete"},
|
{Hook::InsertDelete, "InsertDelete"},
|
||||||
|
|
Loading…
Reference in New Issue
Block a user