   #
   # Returns nothing.
   execute: (count=1) ->
-    buffer = @editor.getBuffer()
-
-    buffer.transact =>
+    @undoTransaction =>
       _.times count, =>
         @editor.joinLine()
 
-  # Public: Not implemented.
-  #
-  # Returns nothing.
-  compose: (register) ->
-    throw new OperatorError("Not Implemented")
-
 module.exports = { OperatorError, Delete, Yank, Put, Join, Indent, Outdent, Change }

  constructor: (@message) ->
    @name = "Operator Error"

#
# It deletes everything selected by the following motion.
#
class Delete
  motion: null
  complete: null
  vimState: null
  allowEOL: null
  selectOptions: null

  constructor: (@editor, @vimState, {@motion, @allowEOL, @selectOptions}={}) ->
    @complete = false

  isComplete: -> @complete

  # Public: Deletes the text selected by the given motion.
  #
  # count - The number of times to execute.

          @editor.moveCursorUp()
          @editor.moveCursorToFirstCharacterOfLine()

#
# It combines the current line with the following line.
#
class Join extends Operator
  constructor: (@editor, @vimState, {@selectOptions}={}) -> @complete = true

  # Public: Combines the current with the following lines
  #
