       onFilePathChange: => setImmediate(=> @controlBar.updateItemCount())
       allItems: []
       filterSpec: filterSpec
+      initialRender: true
     }
     console.log 'hasCache', reducerState.hasCachedItems, reducerState.filterSpec.include
 

    resolveGetItem = null
    oldSelectedItem = null
    oldColumn = null
    @nextRenderingPoint = @itemAreaStart
    grammarUpdated = false

    reducerState = {


  # reducer
  # -------------------------
  # editor scan
  renderItems: (state) =>
    if not state.items.length and not state.initialRender
      return null

    texts = state.items.map (item) => @provider.viewForItem(item)

    @withIgnoreChange =>
      if @editor.getLastBufferRow() is 0
        @resetQuery()

      eof = @editor.getEofBufferPosition()
      if state.initialRender
        range = [@itemAreaStart, eof]
        text = '' + texts.join("\n")
      else
        range = [eof, eof]
        text = "\n" + texts.join("\n")

      @editorLastRow = @editor.setTextInBufferRange(range, text, undo: 'skip').end.row
      @setModifiedState(false)

    {initialRender: false}

  observeChange: ->
    @editor.buffer.onDidChange (event) =>
