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}"
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
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) }
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
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
remainder = case state
when :instring
- self[region_start .. -1]
+ self[region_start .. -1].gsub(/^\s+/, "")
else
nil
end