sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 4971a2b57dceb6c92aac2d47c55e81ea58677f07
parent f4fd908dbe5ed6a8b256256d71f56d135c95f452
Author: wmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Date:   Sat, 24 Nov 2007 20:08:07 +0000

make label-list-mode non-modal


git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@717 5c8cc53c-5e98-4d25-b20a-d8db53a31250

Diffstat:
M bin/sup | 8 +++-----
M lib/sup/buffer.rb | 3 ++-
M lib/sup/modes/label-list-mode.rb | 7 +++----
M lib/sup/modes/label-search-results-mode.rb | 6 ++----
4 files changed, 10 insertions(+), 14 deletions(-)
diff --git a/bin/sup b/bin/sup
@@ -216,7 +216,7 @@ begin
         bm.spawn_unless_exists("Buffer List") { BufferListMode.new }
       when :list_contacts
         b = bm.spawn_unless_exists("Contact List") { ContactListMode.new }
-        b.mode.load_in_background
+        b.mode.load_in_background if b
       when :search
         query = BufferManager.ask :search, "search all messages: "
         next unless query && query !~ /^\s*$/
@@ -246,10 +246,8 @@ begin
           BufferManager.spawn "Edit message", r
           r.edit_message
         else
-          b = BufferManager.spawn_unless_exists("All drafts") do
-            mode = LabelSearchResultsMode.new [:draft]
-          end
-          b.mode.load_threads :num => b.content_height
+          b = BufferManager.spawn_unless_exists("All drafts") { LabelSearchResultsMode.new [:draft] }
+          b.mode.load_threads :num => b.content_height if b
         end
       when :nothing
       when :redraw
diff --git a/lib/sup/buffer.rb b/lib/sup/buffer.rb
@@ -259,11 +259,12 @@ class BufferManager
   def spawn_unless_exists title, opts={}
     if @name_map.member? title
       raise_to_front @name_map[title] unless opts[:hidden]
+      nil
     else
       mode = yield
       spawn title, mode, opts
+      @name_map[title]
     end
-    @name_map[title]
   end
 
   def spawn title, mode, opts={}
diff --git a/lib/sup/modes/label-list-mode.rb b/lib/sup/modes/label-list-mode.rb
@@ -2,18 +2,16 @@ module Redwood
 
 class LabelListMode < LineCursorMode
   register_keymap do |k|
-    k.add :select_label, "Select label", :enter
+    k.add :select_label, "Search by label", :enter
     k.add :reload, "Discard label list and reload", '@'
     k.add :toggle_show_unread_only, "Toggle between all labels and those with unread mail", :tab
   end
 
-  bool_reader :done
   attr_reader :value
 
   def initialize
     @labels = []
     @text = []
-    @done = false
     @value = nil
     @unread_only = false
     super
@@ -68,7 +66,8 @@ protected
 
   def select_label
     @value, string = @labels[curpos]
-    @done = true if @value
+    return unless @value
+    LabelSearchResultsMode.spawn_nicely @value
   end
 end
 
diff --git a/lib/sup/modes/label-search-results-mode.rb b/lib/sup/modes/label-search-results-mode.rb
@@ -18,10 +18,8 @@ class LabelSearchResultsMode < ThreadIndexMode
     when :inbox
       BufferManager.raise_to_front InboxMode.instance.buffer
     else
-      BufferManager.spawn_unless_exists("All threads with label '#{label}'") do
-        mode = LabelSearchResultsMode.new([label])
-        mode.load_threads :num => b.content_height
-      end
+      b = BufferManager.spawn_unless_exists("All threads with label '#{label}'") { LabelSearchResultsMode.new [label] }
+      b.mode.load_threads :num => b.content_height if b
     end
   end
 end