12 def method_missing m, *a
15 @__locals[m] = @__locals[m].call(*a) # only call the proc once
24 if BufferManager.instantiated?
25 @__say_id = BufferManager.say s, @__say_id
26 BufferManager.draw_screen
33 Redwood::log "hook[#@__name]: #{s}"
37 if BufferManager.instantiated?
38 BufferManager.ask_yes_or_no q
41 gets.chomp.downcase == 'y'
50 HookManager.tags[tag] = value
58 BufferManager.clear @__say_id if @__say_id
71 Dir.mkdir dir unless File.exists? dir
73 self.class.i_am_the_instance self
78 def run name, locals={}
79 hook = hook_for(name) or return
80 context = @contexts[hook] ||= HookContext.new(name)
81 context.__locals = locals
85 result = context.instance_eval @hooks[name], fn_for(name)
87 log "error running hook: #{e.message}"
88 log e.backtrace.join("\n")
89 @hooks[name] = nil # disable it
90 BufferManager.flash "Error running hook: #{e.message}" if BufferManager.instantiated?
96 def register name, desc
100 def print_hooks f=$stdout
102 Have #{@descs.size} registered hooks:
106 @descs.sort.each do |name, desc|
116 def enabled? name; !hook_for(name).nil? end
121 unless @hooks.member? name
124 returning IO.read(fn_for(name)) do
125 log "read '#{name}' from #{fn_for(name)}"
127 rescue SystemCallError => e
128 #log "disabled hook for '#{name}': #{e.message}"
137 File.join @dir, "#{name}.rb"
141 Redwood::log("hook: " + m)