diff --git a/src/app/anchor.coffee b/src/app/anchor.coffee index ccc625004..48efcfa86 100644 --- a/src/app/anchor.coffee +++ b/src/app/anchor.coffee @@ -44,8 +44,8 @@ class Anchor position = Point.fromObject(position) clip = options.clip ? true - @screenPosition = if clip then @editor.clipScreenPosition(position) else position - @bufferPosition = @editor.bufferPositionForScreenPosition(position) + @screenPosition = if clip then @editor.clipScreenPosition(position, options) else position + @bufferPosition = @editor.bufferPositionForScreenPosition(position, options) Object.freeze @screenPosition - Object.freeze @bufferPosition \ No newline at end of file + Object.freeze @bufferPosition diff --git a/src/app/cursor.coffee b/src/app/cursor.coffee index 01fedf2d0..2e84feafe 100644 --- a/src/app/cursor.coffee +++ b/src/app/cursor.coffee @@ -148,7 +148,7 @@ class Cursor extends View moveRight: -> { row, column } = @getScreenPosition() - @setScreenPosition(@editor.clipScreenPosition([row, column + 1], skipAtomicTokens: true, wrapBeyondNewlines: true, wrapAtSoftNewlines: true)) + @setScreenPosition([row, column + 1], skipAtomicTokens: true, wrapBeyondNewlines: true, wrapAtSoftNewlines: true) moveLeft: -> { row, column } = @getScreenPosition() diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 1e93c1186..a6e775c6f 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -333,8 +333,8 @@ class Editor extends View screenPositionForBufferPosition: (position) -> @renderer.screenPositionForBufferPosition(position) - bufferPositionForScreenPosition: (position) -> - @renderer.bufferPositionForScreenPosition(position) + bufferPositionForScreenPosition: (position, options) -> + @renderer.bufferPositionForScreenPosition(position, options) screenRangeForBufferRange: (range) -> @renderer.screenRangeForBufferRange(range) diff --git a/src/app/line-map.coffee b/src/app/line-map.coffee index 88a017406..e545765df 100644 --- a/src/app/line-map.coffee +++ b/src/app/line-map.coffee @@ -57,8 +57,8 @@ class LineMap screenPositionForBufferPosition: (bufferPosition) -> @translatePosition('bufferDelta', 'screenDelta', bufferPosition) - bufferPositionForScreenPosition: (screenPosition) -> - @translatePosition('screenDelta', 'bufferDelta', screenPosition) + bufferPositionForScreenPosition: (screenPosition, options) -> + @translatePosition('screenDelta', 'bufferDelta', screenPosition, options) screenRangeForBufferRange: (bufferRange) -> bufferRange = Range.fromObject(bufferRange) @@ -116,6 +116,7 @@ class LineMap @clipToBounds(sourceDeltaType, sourcePosition) if clipToBounds traversalResult = @traverseByDelta(sourceDeltaType, sourcePosition) lastLineFragment = traversalResult.lastLineFragment + traversedAllFragments = traversalResult.traversedAllFragments sourceDelta = traversalResult[sourceDeltaType] targetDelta = traversalResult[targetDeltaType] @@ -130,7 +131,7 @@ class LineMap else targetDelta.column = maxTargetColumn - 1 return @clipPosition(targetDeltaType, targetDelta) - else if sourcePosition.column > maxSourceColumn and wrapBeyondNewlines + else if sourcePosition.column > maxSourceColumn and wrapBeyondNewlines and not traversedAllFragments targetDelta.row++ targetDelta.column = 0 else @@ -157,14 +158,16 @@ class LineMap screenDelta = new Point bufferDelta = new Point - for lineFragment in @lineFragments + for lineFragment, index in @lineFragments iterator({ lineFragment, screenDelta, bufferDelta }) if traversalDelta.isGreaterThanOrEqual(startPosition) and iterator? traversalDelta = traversalDelta.add(lineFragment[deltaType]) break if traversalDelta.isGreaterThan(endPosition) screenDelta = screenDelta.add(lineFragment.screenDelta) bufferDelta = bufferDelta.add(lineFragment.bufferDelta) - { screenDelta, bufferDelta, lastLineFragment: lineFragment } + lastLineFragment = lineFragment + traversedAllFragments = (index == @lineFragments.length - 1) + { screenDelta, bufferDelta, lastLineFragment, traversedAllFragments } logLines: (start=0, end=@screenLineCount() - 1)-> for row in [start..end] diff --git a/src/app/renderer.coffee b/src/app/renderer.coffee index 6b7c0cef3..39c449042 100644 --- a/src/app/renderer.coffee +++ b/src/app/renderer.coffee @@ -103,8 +103,8 @@ class Renderer screenPositionForBufferPosition: (position) -> @lineMap.screenPositionForBufferPosition(position) - bufferPositionForScreenPosition: (position) -> - @lineMap.bufferPositionForScreenPosition(position) + bufferPositionForScreenPosition: (position, options) -> + @lineMap.bufferPositionForScreenPosition(position, options) clipScreenPosition: (position, options={}) -> @lineMap.clipScreenPosition(position, options)