     # Bail if we don't yet have the background completer's final word on the current query.
     return unless response.mayCacheResults
 
-    # Bail if there's an update pending (because then @input and the completion state are out of sync).
-    return if @updateTimer?
-
     value = @getInputWithoutPromptedText()
     @previousLength ?= value.length
     previousLength = @previousLength

      return "enter"
    else if event.keyCode == keyCodes.backspace || event.keyCode == keyCodes.deleteKey
      return "delete"
    else if key in [ "left", "right" ] and event.ctrlKey and not (event.altKey or event.metaKey)
      return "control-#{key}"

    null


        @suppressedLeadingKeyword = null
        @updateCompletions()
      else
        return true # Do not suppress event.
    else if action in [ "left", "right" ]
      [ start, end ] = [ @input.selectionStart, @input.selectionEnd ]
      @previousLength = end
      if event.ctrlKey and not (event.altKey or event.metaKey)
        return true unless @inputContainsASelectionRange() and end == @input.value.length
        # "Control-Right" advances the start of the selection by a word.
        text = @input.value[start...end]
        switch action
          when "right"
            newText = text.replace /^\s*\S+\s*/, ""
            @input.setSelectionRange start + (text.length - newText.length), end
          when "left"
            newText = text.replace /\S+\s*$/, ""
            @input.setSelectionRange start + (newText.length - text.length), end
      else
        return true # Do not suppress event.

    # It seems like we have to manually suppress the event here and still return true.
    event.stopImmediatePropagation()
