From 462eba9c8b1178fd37130739863486e273c2ef54 Mon Sep 17 00:00:00 2001 From: wmorgan Date: Fri, 9 Nov 2007 06:44:20 +0000 Subject: [PATCH] fix email tab completion (i think!) git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@687 5c8cc53c-5e98-4d25-b20a-d8db53a31250 --- lib/sup/buffer.rb | 19 +++++++++++++++---- lib/sup/util.rb | 7 +++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/sup/buffer.rb b/lib/sup/buffer.rb index d5ebff2..277bc3e 100644 --- a/lib/sup/buffer.rb +++ b/lib/sup/buffer.rb @@ -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) } diff --git a/lib/sup/util.rb b/lib/sup/util.rb index 952e0e5..6c8673c 100644 --- a/lib/sup/util.rb +++ b/lib/sup/util.rb @@ -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 -- 2.45.2