diff --git a/spec/app/editor-spec.coffee b/spec/app/editor-spec.coffee index 1b2d4ff11..073cee8c6 100644 --- a/spec/app/editor-spec.coffee +++ b/spec/app/editor-spec.coffee @@ -1388,6 +1388,15 @@ describe "Editor", -> expect(editor.renderedLines.find('.line').length).toBe 1 expect(editor.renderedLines.find('.line').text()).toBe buffer.lineForRow(0) + describe "when folding leaves fewer screen lines than the first rendered screen line (regression)", -> + it "clears all screen lines and does not throw any exceptions", -> + editor.lineOverdraw = 1 + editor.attachToDom(heightInLines: 5) + editor.scrollToBottom() + editor.activeEditSession.foldBufferRow(0) + expect(editor.renderedLines.find('.line').length).toBe 1 + expect(editor.renderedLines.find('.line').text()).toBe buffer.lineForRow(0) + describe "when autoscrolling at the end of the document", -> it "renders lines properly", -> editor.edit(project.buildEditSession('two-hundred.txt')) diff --git a/src/app/editor.coffee b/src/app/editor.coffee index dc512d31b..42888db14 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -1149,13 +1149,14 @@ class Editor extends View updateRenderedLines: -> firstVisibleScreenRow = @getFirstVisibleScreenRow() lastVisibleScreenRow = @getLastVisibleScreenRow() + lastScreenRow = @getLastScreenRow() if @firstRenderedScreenRow? and firstVisibleScreenRow >= @firstRenderedScreenRow and lastVisibleScreenRow <= @lastRenderedScreenRow - renderFrom = @firstRenderedScreenRow - renderTo = Math.min(@getLastScreenRow(), @lastRenderedScreenRow) + renderFrom = Math.min(lastScreenRow, @firstRenderedScreenRow) + renderTo = Math.min(lastScreenRow, @lastRenderedScreenRow) else - renderFrom = Math.max(0, firstVisibleScreenRow - @lineOverdraw) - renderTo = Math.min(@getLastScreenRow(), lastVisibleScreenRow + @lineOverdraw) + renderFrom = Math.min(lastScreenRow, Math.max(0, firstVisibleScreenRow - @lineOverdraw)) + renderTo = Math.min(lastScreenRow, lastVisibleScreenRow + @lineOverdraw) if @pendingChanges.length == 0 and @firstRenderedScreenRow and @firstRenderedScreenRow <= renderFrom and renderTo <= @lastRenderedScreenRow return