6 Thread.abort_on_exception = true # make debugging possible
9 ## this is for debugging purposes because i keep calling nil.id and
10 ## i want it to throw an exception
12 raise "wrong id called"
19 BASE_DIR = File.join(ENV["HOME"], ".sup")
20 CONFIG_FN = File.join(BASE_DIR, "config.yaml")
21 SOURCE_FN = File.join(BASE_DIR, "sources.yaml")
22 LABEL_FN = File.join(BASE_DIR, "labels.txt")
23 CONTACT_FN = File.join(BASE_DIR, "contacts.txt")
24 DRAFT_DIR = File.join(BASE_DIR, "drafts")
25 SENT_FN = File.join(BASE_DIR, "sent.mbox")
27 YAML_DOMAIN = "masanjin.net"
28 YAML_DATE = "2006-10-01"
30 ## one-stop shop for yamliciousness
32 def register_yaml klass, props
33 vars = props.map { |p| "@#{p}" }
34 path = klass.name.gsub(/::/, "/")
36 klass.instance_eval do
37 define_method(:to_yaml_properties) { vars }
38 define_method(:to_yaml_type) { "!#{YAML_DOMAIN},#{YAML_DATE}/#{path}" }
41 YAML.add_domain_type("#{YAML_DOMAIN},#{YAML_DATE}", path) do |type, val|
42 klass.new(*props.map { |p| val[p] })
46 def save_yaml_obj object, fn, compress=false
48 Zlib::GzipWriter.open(fn) { |f| f.puts object.to_yaml }
50 File.open(fn, "w") { |f| f.puts object.to_yaml }
54 def load_yaml_obj fn, compress=false
57 Zlib::GzipReader.open(fn) { |f| YAML::load f }
64 module_function :register_yaml, :save_yaml_obj, :load_yaml_obj
67 ## set up default configuration file
69 if File.exists? Redwood::CONFIG_FN
70 $config = Redwood::load_yaml_obj Redwood::CONFIG_FN
75 :name => "Your Name Here",
76 :email => "your.email.here@domain.tld",
78 :sendmail => "/usr/sbin/sendmail -oem -ti",
79 :sig_file => File.join(ENV["HOME"], ".signature")
82 :editor => ENV["EDITOR"] || "/usr/bin/vi",
85 FileUtils.mkdir_p Redwood::BASE_DIR
86 Redwood::save_yaml_obj $config, Redwood::CONFIG_FN
87 rescue StandardError => e
88 $stderr.puts "warning: #{e.message}"
100 require "sup/textfield"
104 require "sup/colormap"
106 require "sup/contact"
110 require "sup/modes/scroll-mode"
111 require "sup/modes/text-mode"
112 require "sup/modes/line-cursor-mode"
113 require "sup/modes/help-mode"
114 require "sup/modes/edit-message-mode"
115 require "sup/modes/compose-mode"
116 require "sup/modes/resume-mode"
117 require "sup/modes/forward-mode"
118 require "sup/modes/reply-mode"
119 require "sup/modes/label-list-mode"
120 require "sup/modes/contact-list-mode"
121 require "sup/modes/thread-view-mode"
122 require "sup/modes/thread-index-mode"
123 require "sup/modes/label-search-results-mode"
124 require "sup/modes/search-results-mode"
125 require "sup/modes/person-search-results-mode"
126 require "sup/modes/inbox-mode"
127 require "sup/modes/buffer-list-mode"
128 require "sup/modes/log-mode"
129 require "sup/modes/poll-mode"
134 def log s; Logger.log s; end
139 d = File.join base, "sup/share/modes/"
140 Redwood::Mode.load_all_modes d if File.directory? d