From: wmorgan Date: Fri, 2 Nov 2007 04:11:36 +0000 (+0000) Subject: refine search by pressing '.' in search-results-mode, thanks to christopher warrington X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=54c364be51521d5ae2b275a9631fb9c592e5760c;p=sup refine search by pressing '.' in search-results-mode, thanks to christopher warrington git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@659 5c8cc53c-5e98-4d25-b20a-d8db53a31250 --- diff --git a/bin/sup b/bin/sup index 106ea0e..6eabf56 100644 --- a/bin/sup +++ b/bin/sup @@ -218,19 +218,7 @@ begin 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*$/ - - 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 + SearchResultsMode.spawn_by_query when :list_labels labels = LabelManager.listable_labels.map { |l| LabelManager.string_for l } user_label = bm.ask_with_completions :label, "Show threads with label (enter for listing): ", labels diff --git a/lib/sup/modes/search-results-mode.rb b/lib/sup/modes/search-results-mode.rb index 73e9809..6f0da2f 100644 --- a/lib/sup/modes/search-results-mode.rb +++ b/lib/sup/modes/search-results-mode.rb @@ -6,12 +6,34 @@ class SearchResultsMode < ThreadIndexMode super [], { :qobj => @qobj } end + register_keymap do |k| + k.add :refine_search, "Refine search", '.' + end + + def refine_search + SearchResultsMode.spawn_by_query(@qobj.to_s + " ") + end + ## a proper is_relevant? method requires some way of asking ferret ## if an in-memory object satisfies a query. i'm not sure how to do ## that yet. in the worst case i can make an in-memory index, add ## the message, and search against it to see if i have > 0 results, ## but that seems pretty insane. + def self.spawn_by_query default="" + text = BufferManager.ask :search, "query: ", default + return unless text && text !~ /^\s*$/ + + begin + qobj = Index.parse_user_query_string text + short_text = text.length < 20 ? text : text[0 ... 20] + "..." + mode = SearchResultsMode.new qobj + BufferManager.spawn "search: \"#{short_text}\"", mode + mode.load_threads :num => mode.buffer.content_height + rescue Ferret::QueryParser::QueryParseException => e + BufferManager.flash "Couldn't parse query." + end + end end end