         selectionRect = Rect.intersect selectionRect, Rect.create 0, 0, window.innerWidth, window.innerHeight
         if selectionRect.height >= 0 and selectionRect.width >= 0
           # The selection is visible in the current viewport.
-          if @selection.toString().length == 0
+          if @selection.type == "Caret"
             # The caret is in the viewport. Make make it visible.
             @movement.extendByOneCharacter(forward) or @movement.extendByOneCharacter backward
         else

    super extend options, name: "caret", indicator: "Caret mode", alterMethod: "move"

    # Establish the initial caret.
    if @selection.anchorNode
      @movement.collapseSelectionToAnchor()
    else
      @establishInitialSelectionAnchor()
      unless @selection.anchorNode
        @exit()
        HUD.showForDuration "Create a selection before entering visual mode.", 2500
        return

    @movement.extendByOneCharacter forward
    @movement.scrollIntoView()


    # Establish or use the initial selection.  If that's not possible, then enter caret mode.
    unless @name == "caret"
      if @selection.type in [ "Caret", "Range" ]
        selectionRect = @selection.getRangeAt(0).getBoundingClientRect()
        if window.vimiumDomTestsAreRunning
          # We're running the DOM tests, where getBoundingClientRect() isn't available.
