sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit b5dd3d6ea7ff947a4ef58e8b04dd0b9402a0ab27
parent 3fb8aa45914ab05002e87192995abf791d584684
Author: Rich Lane <rlane@club.cc.cmu.edu>
Date:   Mon,  7 Jun 2010 08:11:42 -0700

move HookManager singleton instantiation to Redwood.start

Diffstat:
M bin/sup | 4 ++--
M lib/sup.rb | 6 +-----
M lib/sup/hook.rb | 13 +++++++++----
M test/test_server.rb | 3 ++-
4 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/bin/sup b/bin/sup
@@ -58,6 +58,7 @@ No return value.
 EOS
 
 if $opts[:list_hooks]
+  Redwood.start
   Redwood::HookManager.print_hooks
   exit
 end
@@ -95,8 +96,6 @@ global_keymap = Keymap.new do |k|
     kk.add :run_keybindings_hook, "Rerun keybindings hook", 'k'
   end
 end
-  
-Redwood::Keymap.run_hook global_keymap
 
 ## the following magic enables wide characters when used with a ruby
 ## ncurses.so that's been compiled against libncursesw. (note the w.) why
@@ -173,6 +172,7 @@ begin
   end
 
   HookManager.run "startup"
+  Redwood::Keymap.run_hook global_keymap
 
   debug "starting curses"
   Redwood::Logger.remove_sink $stderr
diff --git a/lib/sup.rb b/lib/sup.rb
@@ -125,6 +125,7 @@ module Redwood
     $config = load_config Redwood::CONFIG_FN
     @log_io = File.open(Redwood::LOG_FN, 'a')
     Redwood::Logger.add_sink @log_io
+    Redwood::HookManager.init Redwood::HOOK_DIR
     Redwood::SentManager.init $config[:sent_source] || 'sup://sent'
     Redwood::ContactManager.init Redwood::CONTACT_FN
     Redwood::LabelManager.init Redwood::LABEL_FN
@@ -292,11 +293,6 @@ end
 require "sup/util"
 require "sup/hook"
 
-## we have to initialize this guy first, because other classes must
-## reference it in order to register hooks, and they do that at parse
-## time.
-Redwood::HookManager.init Redwood::HOOK_DIR
-
 ## everything we need to get logging working
 require "sup/logger"
 Redwood::Logger.init.add_sink $stderr
diff --git a/lib/sup/hook.rb b/lib/sup/hook.rb
@@ -61,10 +61,15 @@ class HookManager
 
   include Singleton
 
+  @descs = {}
+
+  class << self
+    attr_reader :descs
+  end
+
   def initialize dir
     @dir = dir
     @hooks = {}
-    @descs = {}
     @contexts = {}
     @tags = {}
 
@@ -90,17 +95,17 @@ class HookManager
     result
   end
 
-  def register name, desc
+  def self.register name, desc
     @descs[name] = desc
   end
 
   def print_hooks f=$stdout
 puts <<EOS
-Have #{@descs.size} registered hooks:
+Have #{HookManager.descs.size} registered hooks:
 
 EOS
 
-    @descs.sort.each do |name, desc|
+    HookManager.descs.sort.each do |name, desc|
       f.puts <<EOS
 #{name}
 #{"-" * name.length}
diff --git a/test/test_server.rb b/test/test_server.rb
@@ -65,6 +65,7 @@ class TestServer < Test::Unit::TestCase
     EM.spawn_reactor_thread
     @path = Dir.mktmpdir
     socket_path = File.join(@path, 'socket')
+    Redwood::HookManager.init File.join(@path, 'hooks')
     Redwood::SourceManager.init
     Redwood::SourceManager.load_sources File.join(@path, 'sources.yaml')
     Redwood::Index.init @path
@@ -79,7 +80,7 @@ class TestServer < Test::Unit::TestCase
   def teardown
     FileUtils.rm_r @path if passed?
     puts "not cleaning up #{@path}" unless passed?
-    %w(Index SearchManager SourceManager).each do |x|
+    %w(Index SearchManager SourceManager HookManager).each do |x|
       Redwood.const_get(x.to_sym).deinstantiate!
     end
     EM.kill_reactor_thread