       J: (count) ->
         for [0...count]
           @runMovement forward, "lineboundary"
-          @enterVisualModeForMovement 1, immediateMovement: "w", deleteFromDocument: true
+          @enterVisualModeForMovement 1, immediateMovement: "w", deleteFromDocument: true, noCopyToClipboard: true
           DomUtils.simulateTextEntry @element, " "
 
       r: (count) ->
         handlerStack.push
           _name: "repeat-character"
-          keydown: (event) =>
+          keydown: (event) => DomUtils.suppressPropagation event; @stopBubblingAndFalse
+          keypress: (event) =>
             handlerStack.remove()
-            if KeyboardUtils.isPrintable event
-              keyChar = KeyboardUtils.getKeyChar(event).toLowerCase()
-              @enterVisualModeForMovement count, immediateMovement: "l", deleteFromDocument: true
+            keyChar = String.fromCharCode event.charCode
+            if keyChar.length == 1
+              @enterVisualModeForMovement count, immediateMovement: "l", deleteFromDocument: true, noCopyToClipboard: true
               DomUtils.simulateTextEntry @element, [0...count].map(-> keyChar).join ""
             @suppressEvent
 

class SuppressPrintable extends Mode
  constructor: (options = {}) ->
    handler = (event) =>
      if KeyboardUtils.isPrintable event
        if event.type == "keydown"
          # Completely suppress Backspace and Delete, they change the selection.
          if event.keyCode in [ 8, 46 ]
            @suppressEvent
          else
            DomUtils.suppressPropagation event
            @stopBubblingAndFalse
        else
          @suppressEvent
      else
        @stopBubblingAndTrue

    super extend options,
      keydown: handler


    unless @options.parentMode
      @installFindMode()
    #
    # End of VisualMode constructor.

