     if @options.parentMode
       @options.parentMode.launchSubMode mode, options
     else
-      new mode options
+      new mode extend options, initialRangeOnLaunch: @initialRangeOnLaunch
 
   # Return the character following (to the right of) the focus, and leave the selection unchanged.  Returns
   # undefined if there is no such character.

# SuppressPrintable and CountPrefix are shared utility base classes.
# Movement is a shared vim-like movement base class.
#
# The inheritance hierarchy is:
# - Mode, SuppressPrintable, CountPrefix, Movement, [ VisualMode | CaretMode | EditMode ]
# - Mode, SuppressPrintable, CountPrefix, Movement, VisualMode, VisualLineMode
#

      @runMovementKeyChar @options.immediateMovement, @getCountPrefix()
      return

    # Track the initial selection range.  We'll restore it if the user exits with Escape.
    unless @options.parentMode
      @initialRangeOnLaunch = options.initialRangeOnLaunch ||
        (if @selection.type == "None" then "None" else @selection.getRangeAt 0)

    # This is the main keyboard-event handler for movements and commands.
    @push
      _name: "#{@id}/keypress"
