 
     else
       @tabCount = previousTabCount if event.ctrlKey or event.metaKey or event.altKey
-      keyChar =
-        if Settings.get "filterLinkHints"
-          KeyboardUtils.getKeyChar(event)
-        else
-          KeyboardUtils.getKeyChar(event).toLowerCase()
       unless event.repeat
+        keyChar =
+          if Settings.get "filterLinkHints"
+            KeyboardUtils.getKeyChar(event)
+          else
+            KeyboardUtils.getKeyChar(event).toLowerCase()
         if keyChar
           keyChar = " " if keyChar == "space"
           if keyChar.length == 1

  pushKeyChar: (keyChar) ->
    if 0 <= @linkHintNumbers.indexOf keyChar
      @hintKeystrokeQueue.push keyChar
    # We only accept <Space> and characters which are not used for splitting (e.g. "a", "b", etc., but not "-").
    else if keyChar == " " or not @splitRegexp.test keyChar
      # Since we might renumber the hints, we should reset the current hintKeyStrokeQueue.
      @hintKeystrokeQueue = []
      @linkTextKeystrokeQueue.push keyChar

  popKeyChar: ->
    @hintKeystrokeQueue.pop() or @linkTextKeystrokeQueue.pop()

    previousTabCount = @tabCount
    @tabCount = 0

    # NOTE(smblott) The modifier behaviour here applies only to alphabet hints.
    if event.key in ["Control", "Shift"] and not Settings.get("filterLinkHints") and
      @mode in [ OPEN_IN_CURRENT_TAB, OPEN_WITH_QUEUE, OPEN_IN_NEW_BG_TAB, OPEN_IN_NEW_FG_TAB ]
        @tabCount = previousTabCount
        # Toggle whether to open the link in a new or current tab.
