   # When visual mode starts and there's no existing selection, we launch CaretMode and try to establish a
   # selection.  As a heuristic, we pick the first non-whitespace character of the first visible text node
   # which seems to be big enough to be interesting.
+  # TODO(smblott).  It might be better to do something similar to Clearly or Readability; that is, try to find
+  # the start of the page's main textual content.
   establishInitialSelectionAnchor: ->
     nodes = document.createTreeWalker document.body, NodeFilter.SHOW_TEXT
     while node = nodes.nextNode()

        if @nextCharacterIsWordCharacter()
          @runMovements [ forward, character ], [ backward, word ]
          @collapseSelectionToFocus()
          @runMovements ([0...count].map -> [ forward, word ])..., [ forward, word ], [ backward, word ]
        else
          @runMovements [ forward, word ], [ backward, word ], ([0...count].map -> [ forward, word ])...

      when sentence
        @runMovements [ forward, character ], [ backward, sentence ]

          elementWithFocus = DomUtils.getElementWithFocus @selection, @getDirection() == backward
          if DomUtils.getVisibleClientRect elementWithFocus
            if @selection.type == "Caret"
              # The caret is in the viewport. Make make it visible.
              @extendByOneCharacter(forward) or @extendByOneCharacter backward
          else
            # The selection is outside of the viewport: clear it.  We guess that the user has moved on, and is
            # more likely to be interested in visible content.
            @selection.removeAllRanges()

        if @selection.type != "Range"
          HUD.showForDuration "No usable selection, entering caret mode...", 2500
          @changeMode CaretMode
          return

