     DomUtils.suppressEvent event
 
   updateVisibleMarkers: (hintMarkers, tabCount = 0) ->
-    keyResult = @markerMatcher.getMatchingHints hintMarkers, tabCount
-    linksMatched = keyResult.linksMatched
+    {linksMatched, userMightOverType} = @markerMatcher.getMatchingHints hintMarkers, tabCount
     if linksMatched.length == 0
       @deactivateMode()
     else if linksMatched.length == 1
-      keyResult.delay ?= 0
-      keyResult.waitForEnter ?= false
-      @activateLink linksMatched[0], keyResult
+      @activateLink linksMatched[0], userMightOverType ? false
     else
       @hideMarker marker for marker in hintMarkers
       @showMarker matched, @markerMatcher.hintKeystrokeQueue.length for matched in linksMatched

        @linkActivator clickEl
        LinkHints.activateModeWithQueue() if @mode is OPEN_WITH_QUEUE

    if waitForEnter? and waitForEnter
      new WaitForEnter linkMatched.rect, linkActivator
    else if delay? and 0 < delay
      # Install a mode to block keyboard events if the user is still typing.  The intention is to prevent the
      # user from inadvertently launching Vimium commands when typing the link text.
      new TypingProtector delay, linkMatched?.rect, linkActivator
    else
      DomUtils.flashRect linkMatched.rect
      linkActivator()

    @activeHintMarker = linksMatched[tabCount]
    @activeHintMarker?.classList.add "vimiumActiveHintMarker"

    linksMatched: linksMatched
    userMightOverType: @hintKeystrokeQueue.length == 0 and 0 < @linkTextKeystrokeQueue.length

  pushKeyChar: (keyChar, keydownKeyChar) ->
    # For filtered hints, we *always* use the keyChar value from keypress, because there is no obvious and
