Hooks now takes a non-const context

This commit is contained in:
Maxime Coste 2013-01-17 13:44:14 +01:00
parent bdc47ddef8
commit 621be2ceab
5 changed files with 14 additions and 11 deletions

View File

@ -49,7 +49,11 @@ Buffer::Buffer(String name, Flags flags, std::vector<String> lines)
Buffer::~Buffer() Buffer::~Buffer()
{ {
m_hooks.run_hook("BufClose", m_name, Context(Editor(*this))); {
Editor hook_editor{*this};
Context hook_context{hook_editor};
m_hooks.run_hook("BufClose", m_name, hook_context);
}
BufferManager::instance().unregister_buffer(*this); BufferManager::instance().unregister_buffer(*this);
assert(m_change_listeners.empty()); assert(m_change_listeners.empty());

View File

@ -344,12 +344,9 @@ void add_hook(const CommandParameters& params, Context& context)
// copy so that the lambda gets a copy as well // copy so that the lambda gets a copy as well
Regex regex(params[2].begin(), params[2].end()); Regex regex(params[2].begin(), params[2].end());
String command = params[3]; String command = params[3];
auto hook_func = [=](const String& param, const Context& context) { auto hook_func = [=](const String& param, Context& context) {
if (boost::regex_match(param.begin(), param.end(), regex)) if (boost::regex_match(param.begin(), param.end(), regex))
{ CommandManager::instance().execute(command, context);
Context new_context(context.editor());
CommandManager::instance().execute(command, new_context);
}
}; };
const String& scope = params[0]; const String& scope = params[0];

View File

@ -10,7 +10,7 @@ void HookManager::add_hook(const String& hook_name, HookFunc hook)
void HookManager::run_hook(const String& hook_name, void HookManager::run_hook(const String& hook_name,
const String& param, const String& param,
const Context& context) const Context& context) const
{ {
if (m_parent) if (m_parent)
m_parent->run_hook(hook_name, param, context); m_parent->run_hook(hook_name, param, context);

View File

@ -9,7 +9,7 @@ namespace Kakoune
{ {
class Context; class Context;
typedef std::function<void (const String&, const Context&)> HookFunc; typedef std::function<void (const String&, Context&)> HookFunc;
class HookManager class HookManager
{ {
@ -18,7 +18,7 @@ public:
void add_hook(const String& hook_name, HookFunc hook); void add_hook(const String& hook_name, HookFunc hook);
void run_hook(const String& hook_name, const String& param, void run_hook(const String& hook_name, const String& param,
const Context& context) const; Context& context) const;
private: private:
HookManager() HookManager()

View File

@ -18,7 +18,8 @@ Window::Window(Buffer& buffer)
{ {
HighlighterRegistry& registry = HighlighterRegistry::instance(); HighlighterRegistry& registry = HighlighterRegistry::instance();
m_hooks.run_hook("WinCreate", buffer.name(), Context(*this)); Context hook_context{*this};
m_hooks.run_hook("WinCreate", buffer.name(), hook_context);
m_options.register_watcher(*this); m_options.register_watcher(*this);
m_highlighters.append(registry["expand_tabs"](*this, {})); m_highlighters.append(registry["expand_tabs"](*this, {}));
@ -185,7 +186,8 @@ void Window::on_incremental_insertion_end()
void Window::on_option_changed(const String& name, const Option& option) void Window::on_option_changed(const String& name, const Option& option)
{ {
String desc = name + "=" + option.as_string(); String desc = name + "=" + option.as_string();
m_hooks.run_hook("WinSetOption", desc, Context(*this)); Context hook_context{*this};
m_hooks.run_hook("WinSetOption", desc, hook_context);
} }
} }