X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=lib%2Fsup.rb;h=7f9396c6c5fa6faaad03bfb199c4d984b2327d2c;hb=8039b8594c5246338406b284ab9b2c4974b77937;hp=ed144589a705abd854573e9b9f6eddf247ec458a;hpb=3dc202c1f8880357ce31bb65e4f52fe1110dad60;p=sup diff --git a/lib/sup.rb b/lib/sup.rb index ed14458..7f9396c 100644 --- a/lib/sup.rb +++ b/lib/sup.rb @@ -85,25 +85,39 @@ module Redwood module_function :reporting_thread, :record_exception, :exceptions ## one-stop shop for yamliciousness - def save_yaml_obj object, fn, safe=false + def save_yaml_obj o, fn, safe=false + o = if o.is_a?(Array) + o.map { |x| (x.respond_to?(:before_marshal) && x.before_marshal) || x } + elsif o.respond_to? :before_marshal + o.before_marshal + else + o + end + if safe safe_fn = "#{File.dirname fn}/safe_#{File.basename fn}" mode = File.stat(fn).mode if File.exists? fn - File.open(safe_fn, "w", mode) { |f| f.puts object.to_yaml } + File.open(safe_fn, "w", mode) { |f| f.puts o.to_yaml } FileUtils.mv safe_fn, fn else - File.open(fn, "w") { |f| f.puts object.to_yaml } + File.open(fn, "w") { |f| f.puts o.to_yaml } end end def load_yaml_obj fn, compress=false - if File.exists? fn + o = if File.exists? fn if compress Zlib::GzipReader.open(fn) { |f| YAML::load f } else YAML::load_file fn end end + if o.is_a?(Array) + o.each { |x| x.after_unmarshal! if x.respond_to?(:after_unmarshal!) } + else + o.after_unmarshal! if o.respond_to?(:after_unmarshal!) + end + o end def start @@ -114,7 +128,6 @@ module Redwood Redwood::DraftManager.init Redwood::DRAFT_DIR Redwood::UpdateManager.init Redwood::PollManager.init - Redwood::SuicideManager.init Redwood::SUICIDE_FN Redwood::CryptoManager.init Redwood::UndoManager.init Redwood::SourceManager.init @@ -182,6 +195,7 @@ end ## set up default configuration file if File.exists? Redwood::CONFIG_FN $config = Redwood::load_yaml_obj Redwood::CONFIG_FN + abort "#{Redwood::CONFIG_FN} is not a valid configuration file (it's a #{$config.class}, not a hash)" unless $config.is_a?(Hash) else require 'etc' require 'socket' @@ -253,7 +267,6 @@ require "sup/modes/scroll-mode" require "sup/modes/text-mode" require "sup/modes/log-mode" require "sup/update" -require "sup/suicide" require "sup/message-chunks" require "sup/message" require "sup/source" @@ -263,6 +276,7 @@ require "sup/imap" require "sup/person" require "sup/account" require "sup/thread" +require "sup/interactive-lock" require "sup/index" require "sup/textfield" require "sup/colormap" @@ -293,6 +307,7 @@ require "sup/modes/buffer-list-mode" require "sup/modes/poll-mode" require "sup/modes/file-browser-mode" require "sup/modes/completion-mode" +require "sup/modes/console-mode" require "sup/sent" $:.each do |base|