       @onDidSelect =>
         @flash @editor.getSelectedBufferRanges()
 
-    if @trackChange
+    if @needTrackChange()
       changeMarker = null
       @onDidSelect =>
-        return if (selection = @editor.getLastSelection()).isEmpty()
-        changeMarker = @editor.markBufferRange selection.getBufferRange(),
+        range = @editor.getSelectedBufferRange()
+        changeMarker = @editor.markBufferRange range,
           invalidate: 'never'
           persistent: false
 
       @onDidOperationFinish =>
-        if range = changeMarker?.getBufferRange()
-          @setMarkForChange(range)
+        if newRange = changeMarker.getBufferRange()
+          @setMarkForChange(newRange)
 
   # target - TextObject or Motion to operate on.
   setTarget: (@target) ->


  constructor: ->
    super
    @setTarget @new(@target) if @target?
    #  To support, `dd`, `cc` and a like.
    if @isSameOperatorRepeated()

  insertNewline: ->
    @editor.insertNewlineAbove()

  repeatInsert: (selection, text) ->
    selection.insertText(text.trimLeft(), autoIndent: true)

class InsertBelowWithNewline extends InsertAboveWithNewline
