     else
       # move to current item
       @editor.setCursorBufferPosition([row, 0])
-
-  isNormalItem: (item) ->
-    item? and not item.skip
 
   getRowForSelectedItem: ->
     @getRowForItem(@getSelectedItem())

    @editor.setTextInBufferRange([[0, 0], @itemAreaStart], text + "\n")

  startSyncToEditor: (editor) ->
    @syncToEditor(editor)
    @syncSubcriptions = new CompositeDisposable
    @syncSubcriptions.add editor.onDidChangeCursorPosition (event) =>
      if isActiveEditor(editor) and (not event.textChanged)
        if @provider.ignoreSideMovementOnSyncToEditor
          return if event.oldBufferPosition.row is event.newBufferPosition.row

        @syncToEditor(editor)

    @syncSubcriptions.add @onDidRefresh =>
      @syncToEditor(editor)

    if @provider.boundToEditor
      @syncSubcriptions.add editor.onDidStopChanging =>
        # Surppress refreshing while editor is active to avoid auto-refreshing while direct-edit.
        @refresh(force: true) unless @isActive()
    else
      @syncSubcriptions.add editor.onDidSave =>
        @refresh(force: true) unless @isActive()

  # Return intems which are injected maxLineTextWidth(used to align lineHeader)
  injectLineHeader: (items) ->


  findDifferentFileItem: (direction) ->
    return if @provider.boundToEditor
    return null unless selectedItem = @getSelectedItem()

    delta = switch direction
      when 'next' then +1
      when 'previous' then -1

    nextRow = (row) => getValidIndexForList(@items, row + delta)
    startRow = row = @getRowForSelectedItem()
    while (row = nextRow(row)) isnt startRow
      if @isNormalItemRow(row) and @items[row].filePath isnt selectedItem.filePath
        return @items[row]

