                         @_update_queue_stop = stop
                     @process_sage_update_queue()
 
-
     close: =>
         @execution_queue?.close()
         super()

            if opts.pos?
                cells = [@cell(opts.pos.line)]
            else
                cells = @get_current_cells()
            for cell in cells
                cell.action
                    execute       : opts.execute

        if changeObj.next?
            @_apply_changeObj(changeObj.next)

    # Get cell at current line or return undefined if create=false
    # and there is no complete cell with input and output.
    cell: (line, create=true) =>
        {start, end} = @current_input_block(line)
        if not create
            cm = @focused_codemirror()
            if cm.getLine(start)?[0] != MARKERS.cell or cm.getLine(end)?[0] != MARKERS.output
                return
        return new SynchronizedWorksheetCell(@, start, end)
        # CRITICAL: We do **NOT** cache cells.  The reason is that client code should create
        # a cell for a specific purpose then forget about it as soon as that is done!!!
        # The reason is that at any time new input cell lines can be added in the
