#include "hook.h" #include "line-ed.h" void line_ed_add_hook(struct line_ed *ed, struct line_ed_hook *hook) { b_queue_push_back(&ed->l_hooks, &hook->hook_entry); } void line_ed_remove_hook(struct line_ed *ed, struct line_ed_hook *hook) { b_queue_delete(&ed->l_hooks, &hook->hook_entry); } void hook_keypress(struct line_ed *ed, b_keycode key) { b_queue_entry *entry = b_queue_first(&ed->l_hooks); while (entry) { struct line_ed_hook *hook = b_unbox(struct line_ed_hook, entry, hook_entry); if (hook->hook_keypress) { hook->hook_keypress(ed, hook, key); } entry = b_queue_next(entry); } } void hook_buffer_modified(struct line_ed *ed) { b_queue_entry *entry = b_queue_first(&ed->l_hooks); while (entry) { struct line_ed_hook *hook = b_unbox(struct line_ed_hook, entry, hook_entry); if (hook->hook_buffer_modified) { hook->hook_buffer_modified(ed, hook); } entry = b_queue_next(entry); } }