]> git.cworth.org Git - sup/blobdiff - lib/sup/modes/label-search-results-mode.rb
add --commit option to spawn a compose-mode upon startup
[sup] / lib / sup / modes / label-search-results-mode.rb
index 836ee6602389a6e8fde4450e382f4aa888df3d5e..af6831c858fb522c5748e2822b98b66226929f34 100644 (file)
@@ -4,13 +4,35 @@ class LabelSearchResultsMode < ThreadIndexMode
   def initialize labels
     @labels = labels
     opts = { :labels => @labels }
-    opts[:load_killed] = true if labels.include? :killed
     opts[:load_deleted] = true if labels.include? :deleted
     opts[:load_spam] = true if labels.include? :spam
     super [], opts
   end
 
-  def is_relevant? m; @labels.all? { |l| m.has_label? l }; end
+  register_keymap do |k|
+    k.add :refine_search, "Refine search", '.'
+  end
+
+  def refine_search
+    label_query = @labels.size > 1 ? "(#{@labels.join('||')})" : @labels.first
+    query = BufferManager.ask :search, "query: ", "+label:#{label_query} "
+    return unless query && query !~ /^\s*$/
+    SearchResultsMode.spawn_from_query query
+  end
+
+  def is_relevant? m; @labels.all? { |l| m.has_label? l } end
+
+  def self.spawn_nicely label
+    label = LabelManager.label_for(label) unless label.is_a?(Symbol)
+    case label
+    when nil
+    when :inbox
+      BufferManager.raise_to_front InboxMode.instance.buffer
+    else
+      b, new = BufferManager.spawn_unless_exists("All threads with label '#{label}'") { LabelSearchResultsMode.new [label] }
+      b.mode.load_threads :num => b.content_height if new
+    end
+  end
 end
 
 end