11 if BufferManager.instantiated?
12 @__say_id = BufferManager.say s, @__say_id
13 BufferManager.draw_screen
20 Redwood::log "hook[#@__name]: #{s}"
24 if BufferManager.instantiated?
25 BufferManager.ask_yes_or_no q
28 gets.chomp.downcase == 'y'
37 HookManager.tags[tag] = value
40 def __run __hook, __filename, __locals
42 eval __locals.map { |k, v| "#{k} = __locals[#{k.inspect}];" }.join, __binding
43 ret = eval __hook, __binding, __filename
44 BufferManager.clear @__say_id if @__say_id
58 Dir.mkdir dir unless File.exists? dir
60 self.class.i_am_the_instance self
65 def run name, locals={}
66 hook = hook_for(name) or return
67 context = @contexts[hook] ||= HookContext.new(name)
71 result = context.__run hook, fn_for(name), locals
73 log "error running hook: #{e.message}"
74 log e.backtrace.join("\n")
75 @hooks[name] = nil # disable it
76 BufferManager.flash "Error running hook: #{e.message}" if BufferManager.instantiated?
81 def register name, desc
85 def print_hooks f=$stdout
87 Have #{@descs.size} registered hooks:
91 @descs.sort.each do |name, desc|
101 def enabled? name; !hook_for(name).nil? end
106 unless @hooks.member? name
108 returning IO.read(fn_for(name)) do
109 log "read '#{name}' from #{fn_for(name)}"
111 rescue SystemCallError => e
112 #log "disabled hook for '#{name}': #{e.message}"
121 File.join @dir, "#{name}.rb"
125 Redwood::log("hook: " + m)