diff --git a/spec/atom/line-folder-spec.coffee b/spec/atom/line-folder-spec.coffee index cfc1ac2b3..2c573c730 100644 --- a/spec/atom/line-folder-spec.coffee +++ b/spec/atom/line-folder-spec.coffee @@ -320,6 +320,7 @@ describe "LineFolder", -> it "returns the nearest valid position based on the current screen lines", -> expect(folder.clipScreenPosition([-1, -1])).toEqual [0, 0] expect(folder.clipScreenPosition([0, -1])).toEqual [0, 0] + expect(folder.clipScreenPosition([-1, 5])).toEqual [0, 0] expect(folder.clipScreenPosition([1, 10000])).toEqual [1, 30] expect(folder.clipScreenPosition([2, 15])).toEqual [2, 15] expect(folder.clipScreenPosition([4, 32])).toEqual [4, 32] diff --git a/spec/atom/line-wrapper-spec.coffee b/spec/atom/line-wrapper-spec.coffee index 0654441eb..4f4bc6157 100644 --- a/spec/atom/line-wrapper-spec.coffee +++ b/spec/atom/line-wrapper-spec.coffee @@ -244,6 +244,7 @@ describe "LineWrapper", -> it "disallows negative positions", -> expect(wrapper.clipScreenPosition([-1, -1])).toEqual [0, 0] + expect(wrapper.clipScreenPosition([-1, 10])).toEqual [0, 0] expect(wrapper.clipScreenPosition([0, -1])).toEqual [0, 0] it "disallows positions beyond the last row", -> diff --git a/src/atom/cursor.coffee b/src/atom/cursor.coffee index f52460f41..45dd7759d 100644 --- a/src/atom/cursor.coffee +++ b/src/atom/cursor.coffee @@ -50,11 +50,7 @@ class Cursor extends View moveUp: -> { row, column } = @getScreenPosition() column = @goalColumn if @goalColumn? - if row > 0 - @setScreenPosition({row: row - 1, column: column}) - else - @moveToLineStart() - + @setScreenPosition({row: row - 1, column: column}) @goalColumn = column moveDown: -> diff --git a/src/atom/line-map.coffee b/src/atom/line-map.coffee index f2fb812fe..320ea908c 100644 --- a/src/atom/line-map.coffee +++ b/src/atom/line-map.coffee @@ -144,7 +144,12 @@ class LineMap clipScreenPosition: (screenPosition, eagerWrap) -> screenPosition = Point.fromObject(screenPosition) - screenPosition = new Point(Math.max(0, screenPosition.row), Math.max(0, screenPosition.column)) + screenPosition.column = Math.max(0, screenPosition.column) + + if screenPosition.row < 0 + screenPosition.row = 0 + screenPosition.column = 0 + maxRow = @lastScreenRow() if screenPosition.row > maxRow screenPosition.row = maxRow