]> git.cworth.org Git - sup/commitdiff
fix email tab completion (i think!)
authorwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Fri, 9 Nov 2007 06:44:20 +0000 (06:44 +0000)
committerwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Fri, 9 Nov 2007 06:44:20 +0000 (06:44 +0000)
git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@687 5c8cc53c-5e98-4d25-b20a-d8db53a31250

lib/sup/buffer.rb
lib/sup/util.rb

index d5ebff2e205f318993468ee6615bec1b5e57639c..277bc3efa229454757687588a3b15b730fdea357 100644 (file)
@@ -355,13 +355,13 @@ class BufferManager
     end
   end
 
-  def ask_many_with_completions domain, question, completions, default=nil, sep=" "
+  def ask_many_with_completions domain, question, completions, default=nil
     ask domain, question, default do |partial|
       prefix, target = 
-        case partial#.gsub(/#{sep}+/, sep)
+        case partial
         when /^\s*$/
           ["", ""]
-        when /^(.*#{sep})?(.*?)$/
+        when /^(.*\s+)?(.*?)$/
           [$1 || "", $2]
         else
           raise "william screwed up completion: #{partial.inspect}"
@@ -371,6 +371,17 @@ class BufferManager
     end
   end
 
+  def ask_many_emails_with_completions domain, question, completions, default=nil
+    ask domain, question, default do |partial|
+      prefix, target = partial.split_on_commas_with_remainder
+      Redwood::log "before: prefix #{prefix.inspect}, target #{target.inspect}"
+      target ||= prefix.pop || ""
+      prefix = prefix.join(", ") + (prefix.empty? ? "" : ", ")
+      Redwood::log "after: prefix #{prefix.inspect}, target #{target.inspect}"
+      completions.select { |x| x =~ /^#{target}/i }.map { |x| [prefix + x, x] }
+    end
+  end
+
   def ask_for_filename domain, question, default=nil
     answer = ask domain, question, default do |s|
       if s =~ /(~([^\s\/]*))/ # twiddle directory expansion
@@ -436,7 +447,7 @@ class BufferManager
     contacts = ContactManager.contacts.map { |c| [ContactManager.alias_for(c), c.full_address, c.email] }
 
     completions = (recent + contacts).flatten.uniq.sort
-    answer = BufferManager.ask_many_with_completions domain, question, completions, default, /\s*,\s*/
+    answer = BufferManager.ask_many_emails_with_completions domain, question, completions, default
 
     if answer
       answer.split_on_commas.map { |x| ContactManager.contact_for(x.downcase) || PersonManager.person_for(x) }
index 952e0e5f672c2e033e5e046b8496c9865c545b88..6c8673c2fc56a64ab6f68077f8e6d07a25cd83d3 100644 (file)
@@ -222,8 +222,7 @@ class String
         char = nil
         newpos = length
       end
-        
-      $stderr.puts "pos #{newpos} (len #{length}), state #{state}, char #{(char || ?$).chr}, region_start #{region_start}"
+
       case char
       when ?"
         state = case state
@@ -235,7 +234,7 @@ class String
       when ?,, nil
         state = case state
           when :outstring, :escaped_outstring:
-            ret << self[region_start ... newpos]
+            ret << self[region_start ... newpos].gsub(/^\s+|\s+$/, "")
             region_start = newpos + 1
             :outstring
           when :instring: :instring
@@ -254,7 +253,7 @@ class String
 
     remainder = case state
       when :instring
-        self[region_start .. -1]
+        self[region_start .. -1].gsub(/^\s+/, "")
       else
         nil
       end