11 if BufferManager.instantiated?
12 @__say_id = BufferManager.say s, @__say_id
13 BufferManager.draw_screen
20 info "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
63 def run name, locals={}
64 hook = hook_for(name) or return
65 context = @contexts[hook] ||= HookContext.new(name)
69 result = context.__run hook, fn_for(name), locals
71 log "error running hook: #{e.message}"
72 log e.backtrace.join("\n")
73 @hooks[name] = nil # disable it
74 BufferManager.flash "Error running hook: #{e.message}" if BufferManager.instantiated?
79 def register name, desc
83 def print_hooks f=$stdout
85 Have #{@descs.size} registered hooks:
89 @descs.sort.each do |name, desc|
99 def enabled? name; !hook_for(name).nil? end
101 def clear; @hooks.clear; 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"