   triageRequest: (request) ->
     @searchEngines.use (engines) =>
       { queryTerms, query } = request
+      request.searchEngines = engines
       keyword = queryTerms[0]
       # Note. For a keyword "w", we match "w search terms" and "w ", but not "w" on its own.
       if keyword and engines[keyword] and (1 < queryTerms.length or /\s$/.test query)

      # Post results, unless there are none and we will be running a continuation.  This avoids
      # collapsing the vomnibar briefly before expanding it again, which looks ugly.
      unless suggestions.length == 0 and shouldRunContinuations
        suggestions = @prepareSuggestions queryTerms, suggestions
        onComplete
          results: suggestions
          mayCacheResults: continuations.length == 0

            console.log "fetched suggestions:", suggestions.length, query if SearchEngineCompleter.debug
            onComplete suggestions.map mkSuggestion

  postProcessSuggestions: (request, suggestions) ->
    return unless request.searchEngines
    engines = (engine for _, engine of request.searchEngines)
    engines.sort (a,b) -> b.searchUrl.length - a.searchUrl.length
    engines.push insertTextPrefix: "", searchUrl: Settings.get "searchUrl"
    for suggestion in suggestions
      unless suggestion.isSearchSuggestion or suggestion.insertText
        for engine in engines
          if suggestion.insertText = Utils.extractQuery engine.searchUrl, suggestion.url
            suggestion.insertText = "#{engine.insertTextPrefix}#{suggestion.insertText}"
            suggestion.title ||= suggestion.insertText
            break
    delete request.searchEngines

# A completer which calls filter() on many completers, aggregates the results, ranks them, and returns the top
# 10. All queries from the vomnibar come through a multi completer.
class MultiCompleter
