   logXOfBase: (x, base) -> Math.log(x) / Math.log(base)
 
   constructor: ->
+    @linkHintCharacters = Settings.get "linkHintCharacters"
+    # We use the keyChar from keydown if the link-hint characters are all "a-z".  This is the default, and
+    # preserves the legacy behavior (which always used keydown) for users which are familiar with that
+    # behavior.  Otherwise, we use keyChar from keypress, which admits non-Latin characters. See #1722.
+    @useKeydown = /^[a-z]*$/.test @linkHintCharacters
     @activateOnEnter = false
     @hintKeystrokeQueue = []
 


    { linksMatched: linksMatched, delay: delay }

  pushKeyChar: (keyChar) ->
    if 0 <= Settings.get("linkHintNumbers").indexOf keyChar
      @hintKeystrokeQueue.push keyChar
    else

  # Handles <Shift> and <Ctrl>.
  onKeyDownInMode: (hintMarkers, event) ->
    return if @delayMode or event.repeat
    @keydownKeyChar = KeyboardUtils.getKeyChar(event).toLowerCase()

    if event.keyCode in [ keyCodes.shiftKey, keyCodes.ctrlKey ] and
      @mode in [ OPEN_IN_CURRENT_TAB, OPEN_WITH_QUEUE, OPEN_IN_NEW_BG_TAB, OPEN_IN_NEW_FG_TAB ]
