_setPosition(position, positionEolStart, resetUpDown) {
    if(_.isUndefined(positionEolStart)) positionEolStart = this.state.positionEolStart
    if(_.isUndefined(resetUpDown)) resetUpDown = true

    //console.debug('position', position, 'positionEolStart', positionEolStart, 'resetUpDown', resetUpDown)

    let currentPosition = this.state.position
    let selectionWasActive = this.state.selectionActive

    this.setState({
      position: position,
      positionEolStart: positionEolStart,
      selectionActive: false
    })

    if(!charEq(position, currentPosition) || selectionWasActive) {
      this.setState({ activeAttributes: position.attributes })
    }

    if(resetUpDown) {
      this.upDownAdvanceX = null
      this.upDownPositionEolStart = null
    }

    this._delayedCursorBlink()
    this._setRemoteCursorModelState()

    if(this.config.eventEmitter.hasListeners('position-change')) {
      this.config.eventEmitter.emit('position-change', this.getPosition())
    }
    if(selectionWasActive && this.config.eventEmitter.hasListeners('selection-change')) {
      this.config.eventEmitter.emit('selection-change', null)
    }
  }
Sets the character and cursor position within the text. The position is relative to an existing
character given by its replica id. The cursor position is calculated based on the character
position. This is generally straightforward except when the character position is the last
character of a line. In this situation, there are two possible cursor positions: at the end of
the line, or at the beginning of the next line. The desired cursor location depends on how one
got there e.g. hitting "end" on a line should keep you on the same line, hitting "home" on the
next line takes you to the same character position, except at the beginning of that line.

@param {object} position The character position to set.
@param {boolean} [positionEolStart = true] positionEolStart When rendering the cursor, this state
  determines the cursor position when the character position is at a line end: whether to place
  the cursor at the start of the next line (positionEolStart = true), or at the end of the
  current one (positionEolStart = false). If the cursor position is not at a line end, this state
  is ignored by the renderer. Since this state is often "left over" from previous calls to _setPosition
  it should not be trusted other than for rendering.
@param {boolean} [resetUpDown = true] resetUpDown Whether to reset the up/down advance
  and position values.