Forward client name to contexts created for write-all

Fixes #937
This commit is contained in:
Maxime Coste 2016-11-24 13:35:42 +00:00
parent 8f2c6eb586
commit e340e0ed39
5 changed files with 18 additions and 11 deletions

View File

@ -708,12 +708,14 @@ void Buffer::on_option_changed(const Option& option)
format("{}={}", option.name(), option.get_as_string())); format("{}={}", option.name(), option.get_as_string()));
} }
void Buffer::run_hook_in_own_context(StringView hook_name, StringView param) void Buffer::run_hook_in_own_context(StringView hook_name, StringView param, String client_name)
{ {
if (m_flags & Buffer::Flags::NoHooks) if (m_flags & Buffer::Flags::NoHooks)
return; return;
InputHandler hook_handler({ *this, Selection{} }, Context::Flags::Transient); InputHandler hook_handler{{ *this, Selection{} },
Context::Flags::Transient,
std::move(client_name)};
hooks().run_hook(hook_name, param, hook_handler.context()); hooks().run_hook(hook_name, param, hook_handler.context());
} }

View File

@ -190,7 +190,8 @@ public:
ValueMap& values() const { return m_values; } ValueMap& values() const { return m_values; }
void run_hook_in_own_context(StringView hook_name, StringView param); void run_hook_in_own_context(StringView hook_name, StringView param,
String client_name = "");
void reload(StringView data, timespec fs_timestamp = InvalidTime); void reload(StringView data, timespec fs_timestamp = InvalidTime);

View File

@ -338,7 +338,7 @@ const CommandDesc write_cmd = {
write_buffer, write_buffer,
}; };
void write_all_buffers() void write_all_buffers(Context& context)
{ {
// Copy buffer list because hooks might be creating/deleting buffers // Copy buffer list because hooks might be creating/deleting buffers
Vector<SafePtr<Buffer>> buffers; Vector<SafePtr<Buffer>> buffers;
@ -350,9 +350,9 @@ void write_all_buffers()
if ((buffer->flags() & Buffer::Flags::File) and buffer->is_modified() if ((buffer->flags() & Buffer::Flags::File) and buffer->is_modified()
and !(buffer->flags() & Buffer::Flags::ReadOnly)) and !(buffer->flags() & Buffer::Flags::ReadOnly))
{ {
buffer->run_hook_in_own_context("BufWritePre", buffer->name()); buffer->run_hook_in_own_context("BufWritePre", buffer->name(), context.name());
write_buffer_to_file(*buffer, buffer->name()); write_buffer_to_file(*buffer, buffer->name());
buffer->run_hook_in_own_context("BufWritePost", buffer->name()); buffer->run_hook_in_own_context("BufWritePost", buffer->name(), context.name());
} }
} }
} }
@ -365,7 +365,7 @@ const CommandDesc write_all_cmd = {
CommandFlags::None, CommandFlags::None,
CommandHelper{}, CommandHelper{},
CommandCompleter{}, CommandCompleter{},
[](const ParametersParser&, Context&, const ShellContext&){ write_all_buffers(); } [](const ParametersParser&, Context& context, const ShellContext&){ write_all_buffers(context); }
}; };
static void ensure_all_buffers_are_saved() static void ensure_all_buffers_are_saved()
@ -490,7 +490,7 @@ const CommandDesc write_all_quit_cmd = {
CommandCompleter{}, CommandCompleter{},
[](const ParametersParser& parser, Context& context, const ShellContext&) [](const ParametersParser& parser, Context& context, const ShellContext&)
{ {
write_all_buffers(); write_all_buffers(context);
quit<false>(context); quit<false>(context);
} }
}; };

View File

@ -367,12 +367,15 @@ void Window::on_option_changed(const Option& option)
} }
void Window::run_hook_in_own_context(StringView hook_name, StringView param) void Window::run_hook_in_own_context(StringView hook_name, StringView param,
String client_name)
{ {
if (m_buffer->flags() & Buffer::Flags::NoHooks) if (m_buffer->flags() & Buffer::Flags::NoHooks)
return; return;
InputHandler hook_handler({ *m_buffer, Selection{} }, Context::Flags::Transient); InputHandler hook_handler{{ *m_buffer, Selection{} },
Context::Flags::Transient,
std::move(client_name)};
hook_handler.context().set_window(*this); hook_handler.context().set_window(*this);
if (m_client) if (m_client)
hook_handler.context().set_client(*m_client); hook_handler.context().set_client(*m_client);

View File

@ -56,7 +56,8 @@ private:
void on_option_changed(const Option& option) override; void on_option_changed(const Option& option) override;
void scroll_to_keep_selection_visible_ifn(const Context& context); void scroll_to_keep_selection_visible_ifn(const Context& context);
void run_hook_in_own_context(StringView hook_name, StringView param); void run_hook_in_own_context(StringView hook_name, StringView param,
String client_name = "");
SafePtr<Buffer> m_buffer; SafePtr<Buffer> m_buffer;
SafePtr<Client> m_client; SafePtr<Client> m_client;