X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=bin%2Fsup;h=ab835e7ba4edcdec548cf43cef117ddafb6fe493;hb=b466aede237fc954ce5c64dd4ed383c04be046ba;hp=c5e54fa31acb72708ff4eef5c52f902bf7ef636f;hpb=59cb2add14f75a2b4977d7c59738ba0baeb2b517;p=sup diff --git a/bin/sup b/bin/sup index c5e54fa..ab835e7 100644 --- a/bin/sup +++ b/bin/sup @@ -2,25 +2,41 @@ require 'rubygems' require 'ncurses' +require 'fileutils' +require 'trollop' require "sup" -module Redwood +$opts = Trollop::options do + version "sup v#{Redwood::VERSION}" + banner < e + require 'highline' + h = HighLine.new + h.say < e + Redwood::log "fatal error loading from #{s}: #{e.message}" + end + end if s.respond_to? :connect + end + + imode.load_threads :num => ibuf.content_height, :when_done => lambda { reporting_thread { sleep 1; PollManager.poll } } + + unless $opts[:no_threads] + PollManager.start_thread + SuicideManager.start_thread + end until $exception bm.draw_screen @@ -123,7 +182,7 @@ begin x = global_keymap.action_for c case x when :quit - break + break if bm.kill_all_buffers_safely when :help curmode = bm.focus_buf.mode bm.spawn_unless_exists("") { HelpMode.new curmode, global_keymap } @@ -132,79 +191,89 @@ begin when :roll_buffers_backwards bm.roll_buffers_backwards when :kill_buffer - bm.kill_buffer bm.focus_buf unless bm.focus_buf.mode.is_a? InboxMode + bm.kill_buffer_safely bm.focus_buf when :list_buffers bm.spawn_unless_exists("Buffer List") { BufferListMode.new } when :list_contacts - mode = ContactListMode.new - bm.spawn "compose to contacts", mode + b = bm.spawn_unless_exists("Contact List") { ContactListMode.new } + b.mode.load_in_background when :search text = bm.ask :search, "query: " next unless text && text !~ /^\s*$/ - mode = SearchResultsMode.new text - short_text = - if text.length < 20 - text - else - text[0 ... 20] + "..." - end - bm.spawn "search: \"#{short_text}\"", mode - bm.draw_screen - mode.load_more_threads mode.buffer.content_height - when :list_labels - b = BufferManager.spawn_unless_exists("all labels") do - LabelListMode.new + + begin + qobj = Index.parse_user_query_string text + short_text = text.length < 20 ? text : text[0 ... 20] + "..." + log "built query from #{text.inspect}: #{qobj}" + mode = SearchResultsMode.new qobj + bm.spawn "search: \"#{short_text}\"", mode + mode.load_threads :num => mode.buffer.content_height + rescue Ferret::QueryParser::QueryParseException => e + bm.flash "Couldn't parse query." end + when :list_labels + b = bm.spawn_unless_exists("Label list") { LabelListMode.new } b.mode.load_in_background when :compose mode = ComposeMode.new - bm.spawn "new message", mode + bm.spawn "New Message", mode mode.edit when :poll - BufferManager.raise_to_front PollManager.buffer - PollManager.poll +# bm.raise_to_front PollManager.buffer + reporting_thread { PollManager.poll } + when :recall_draft + case Index.num_results_for :label => :draft + when 0 + bm.flash "No draft messages." + when 1 + m = nil + Index.each_id_by_date(:label => :draft) { |mid, builder| m = builder.call } + r = ResumeMode.new(m) + BufferManager.spawn "Edit message", r + r.edit + else + b = BufferManager.spawn_unless_exists("All drafts") do + mode = LabelSearchResultsMode.new [:draft] + end + b.mode.load_threads :num => b.content_height + end when :nothing when :redraw bm.completely_redraw_screen else - BufferManager.flash "Unknown key press '#{c.to_character}' for #{bm.focus_buf.mode.name}." + bm.flash "Unknown key press '#{c.to_character}' for #{bm.focus_buf.mode.name}." end end end end - bm.kill_all_buffers - Redwood::LabelManager.save - Redwood::ContactManager.save rescue Exception => e $exception ||= e ensure + Redwood::finish stop_cursing -end - -Index.save unless $exception # TODO: think about this -if $exception case $exception - when IndexError - $stderr.puts <