 
     @editor.clipBufferPosition(bufferPosition)
 
-  getCursorTraversal: (cursor) ->
-    selection = cursor.selection
-    bufferPosition = @getCursorBufferPositionToDisplay(selection)
+  getCursorStyle: (cursor, visible) ->
+    if visible
+      bufferPosition = @getCursorBufferPositionToDisplay(cursor.selection)
+      if @submode is 'linewise' and @editor.isSoftWrapped()
+        screenPosition = @editor.screenPositionForBufferPosition(bufferPosition)
+        {row, column} = screenPosition.traversalFrom(cursor.getScreenPosition())
+      else
+        {row, column} = bufferPosition.traversalFrom(cursor.getBufferPosition())
 
-    if @submode is 'linewise' and @editor.isSoftWrapped()
-      screenPosition = @editor.screenPositionForBufferPosition(bufferPosition)
-      screenPosition.traversalFrom(cursor.getScreenPosition())
+      return {
+        top: @lineHeight * row + 'px'
+        left: column + 'ch'
+        visibility: 'visible'
+      }
     else
-      bufferPosition.traversalFrom(cursor.getBufferPosition())
+      return {visibility: 'hidden'}
 
 module.exports = CursorStyleManager

        @styleDisposables.add new Disposable ->
          cursorNode.style.removeProperty('top')
          cursorNode.style.removeProperty('left')
      else
        # @editorElement.component.getNextUpdatePromise().then =>
        #   for cursorNode in @editorElement.querySelectorAll('.cursor')
        #     console.log [cursorNode.style.top, cursorNode.style.left]
        cursorMarker = cursor.getMarker()
        @editor.decorateMarker(cursorMarker, type: 'cursor', style: cursorStyle)
        @styleDisposables.add new Disposable =>
          @editor.decorateMarker(cursorMarker, type: 'cursor', style: {top: '0px', left: '0ch'})

  getCursorBufferPositionToDisplay: (selection) ->
    bufferPosition = @vimState.swrap(selection).getBufferPositionFor('head', from: ['property'])

    @styleDisposables?.dispose()
    @disposables.dispose()

  updateCursorStyleOld: ->
    # We must dispose previous style modification for non-visual-mode
    @styleDisposables?.dispose()
    @styleDisposables = new CompositeDisposable
    return unless @mode is 'visual'

    if @submode is 'blockwise'
      cursorsToShow = @vimState.getBlockwiseSelections().map (bs) -> bs.getHeadSelection().cursor
    else
      cursorsToShow = @editor.getCursors()

    # In visual-mode or in occurrence operation, cursor are added during operation but selection is added asynchronously.
    # We have to make sure that corresponding cursor's domNode is available at this point to directly modify it's style.
    @editorElement.component.updateSync()
    for cursor in @editor.getCursors()
      cursorIsVisible = cursor in cursorsToShow
      cursor.setVisible(cursorIsVisible)

      if cursorIsVisible
        cursorStyle = @getCursorStyle(cursor, cursorIsVisible)
        # [NOTE] Using non-public API
        cursorNode = @editorElement.component.linesComponent.cursorsComponent.cursorNodesById[cursor.id]
        cursorNode.style.setProperty('top', cursorStyle.top)
