mirror of
https://github.com/atom/atom.git
synced 2026-01-22 21:38:10 -05:00
Emit event from display buffer when soft wrap changes
This allows the editor to be reactive to the edit session and always respect the edit session's current value when initially opened.
This commit is contained in:
@@ -1013,7 +1013,7 @@ describe "Editor", ->
|
||||
|
||||
describe "when soft-wrap is enabled", ->
|
||||
beforeEach ->
|
||||
editor.setSoftWrap(true)
|
||||
editSession.setSoftWrap(true)
|
||||
|
||||
it "does not scroll the buffer horizontally", ->
|
||||
editor.width(charWidth * 30)
|
||||
@@ -1480,7 +1480,7 @@ describe "Editor", ->
|
||||
|
||||
describe "when wrapping is on", ->
|
||||
beforeEach ->
|
||||
editor.setSoftWrap(true)
|
||||
editSession.setSoftWrap(true)
|
||||
|
||||
it "doesn't show the end of line invisible at the end of lines broken due to wrapping", ->
|
||||
editor.setText "a line that wraps"
|
||||
@@ -1631,10 +1631,10 @@ describe "Editor", ->
|
||||
|
||||
describe "when soft-wrap is enabled", ->
|
||||
beforeEach ->
|
||||
editSession.setSoftWrap(true)
|
||||
editor.attachToDom()
|
||||
setEditorHeightInLines(editor, 20)
|
||||
setEditorWidthInChars(editor, 50)
|
||||
editor.setSoftWrap(true)
|
||||
expect(editor.activeEditSession.getSoftWrapColumn()).toBe 50
|
||||
|
||||
it "wraps lines that are too long to fit within the editor's width, adjusting cursor positioning accordingly", ->
|
||||
@@ -1703,7 +1703,7 @@ describe "Editor", ->
|
||||
otherEditor = new Editor(editSession: project.open('sample.js'))
|
||||
spyOn(otherEditor, 'setSoftWrapColumn')
|
||||
|
||||
otherEditor.setSoftWrap(true)
|
||||
otherEditor.activeEditSession.setSoftWrap(true)
|
||||
expect(otherEditor.setSoftWrapColumn).not.toHaveBeenCalled()
|
||||
|
||||
otherEditor.simulateDomAttachment()
|
||||
@@ -1743,7 +1743,7 @@ describe "Editor", ->
|
||||
|
||||
describe "when wrapping is on", ->
|
||||
it "renders a • instead of line number for wrapped portions of lines", ->
|
||||
editor.setSoftWrap(true)
|
||||
editSession.setSoftWrap(true)
|
||||
editor.setSoftWrapColumn(50)
|
||||
expect(editor.gutter.find('.line-number').length).toEqual(8)
|
||||
expect(editor.gutter.find('.line-number:eq(3)').intValue()).toBe 4
|
||||
@@ -1883,7 +1883,7 @@ describe "Editor", ->
|
||||
describe "when there is wrapping", ->
|
||||
beforeEach ->
|
||||
editor.attachToDom(30)
|
||||
editor.setSoftWrap(true)
|
||||
editSession.setSoftWrap(true)
|
||||
setEditorWidthInChars(editor, 20)
|
||||
|
||||
it "highlights the line where the initial cursor position is", ->
|
||||
@@ -1946,7 +1946,7 @@ describe "Editor", ->
|
||||
|
||||
describe "when there is wrapping", ->
|
||||
beforeEach ->
|
||||
editor.setSoftWrap(true)
|
||||
editSession.setSoftWrap(true)
|
||||
setEditorWidthInChars(editor, 20)
|
||||
|
||||
it "highlights the line where the initial cursor position is", ->
|
||||
|
||||
@@ -45,6 +45,12 @@ class DisplayBuffer
|
||||
@subscribe @buffer, 'markers-updated', @handleBufferMarkersUpdated
|
||||
@subscribe @buffer, 'marker-created', @handleBufferMarkerCreated
|
||||
|
||||
@state.on 'changed', ({key, newValue}) =>
|
||||
switch key
|
||||
when 'softWrap'
|
||||
@trigger 'soft-wrap-changed', newValue
|
||||
@updateWrappedScreenLines()
|
||||
|
||||
serialize: -> @state.clone()
|
||||
getState: -> @state
|
||||
|
||||
@@ -67,6 +73,14 @@ class DisplayBuffer
|
||||
@trigger 'changed', eventProperties
|
||||
@resumeMarkerObservers()
|
||||
|
||||
updateWrappedScreenLines: ->
|
||||
start = 0
|
||||
end = @getLastRow()
|
||||
@updateAllScreenLines()
|
||||
screenDelta = @getLastRow() - end
|
||||
bufferDelta = 0
|
||||
@triggerChanged({ start, end, screenDelta, bufferDelta })
|
||||
|
||||
### Public ###
|
||||
|
||||
# Sets the visibility of the tokenized buffer.
|
||||
@@ -83,12 +97,7 @@ class DisplayBuffer
|
||||
# softWrapColumn - A {Number} defining the soft wrap limit.
|
||||
setSoftWrapColumn: (softWrapColumn) ->
|
||||
@state.set('softWrapColumn', softWrapColumn)
|
||||
start = 0
|
||||
end = @getLastRow()
|
||||
@updateAllScreenLines()
|
||||
screenDelta = @getLastRow() - end
|
||||
bufferDelta = 0
|
||||
@triggerChanged({ start, end, screenDelta, bufferDelta })
|
||||
@updateWrappedScreenLines() if @getSoftWrap()
|
||||
|
||||
getSoftWrapColumn: ->
|
||||
@state.get('softWrapColumn')
|
||||
|
||||
@@ -97,6 +97,7 @@ class EditSession
|
||||
@subscribe @displayBuffer, "changed", (e) => @trigger 'screen-lines-changed', e
|
||||
@subscribe @displayBuffer, "markers-updated", => @mergeIntersectingSelections()
|
||||
@subscribe @displayBuffer, 'grammar-changed', => @handleGrammarChange()
|
||||
@subscribe @displayBuffer, 'soft-wrap-changed', (args...) => @trigger 'soft-wrap-changed', args...
|
||||
|
||||
getViewClass: ->
|
||||
require 'editor'
|
||||
|
||||
@@ -773,6 +773,9 @@ class Editor extends View
|
||||
@activeEditSession.on 'scroll-left-changed.editor', (scrollLeft) =>
|
||||
@scrollLeft(scrollLeft)
|
||||
|
||||
@activeEditSession.on 'soft-wrap-changed.editor', (softWrap) =>
|
||||
@setSoftWrap(softWrap)
|
||||
|
||||
@trigger 'editor:path-changed'
|
||||
@resetDisplay()
|
||||
|
||||
@@ -902,7 +905,7 @@ class Editor extends View
|
||||
|
||||
# Activates soft wraps in the editor.
|
||||
toggleSoftWrap: ->
|
||||
@setSoftWrap(not @activeEditSession.getSoftWrap())
|
||||
@activeEditSession.setSoftWrap(not @activeEditSession.getSoftWrap())
|
||||
|
||||
calcSoftWrapColumn: ->
|
||||
Math.floor(@scrollView.width() / @charWidth)
|
||||
@@ -912,10 +915,8 @@ class Editor extends View
|
||||
# softWrap - A {Boolean} which, if `true`, sets soft wraps
|
||||
# softWrapColumn - A {Number} indicating the length of a line in the editor when soft
|
||||
# wrapping turns on
|
||||
setSoftWrap: (softWrap, softWrapColumn=undefined) ->
|
||||
@activeEditSession.setSoftWrap(softWrap)
|
||||
@setSoftWrapColumn(softWrapColumn) if @attached
|
||||
if @activeEditSession.getSoftWrap()
|
||||
setSoftWrap: (softWrap) ->
|
||||
if softWrap
|
||||
@addClass 'soft-wrap'
|
||||
@scrollLeft(0)
|
||||
else
|
||||
@@ -1133,6 +1134,7 @@ class Editor extends View
|
||||
@updateLayerDimensions()
|
||||
@scrollTop(editSessionScrollTop)
|
||||
@scrollLeft(editSessionScrollLeft)
|
||||
@setSoftWrap(@activeEditSession.getSoftWrap())
|
||||
@newCursors = @activeEditSession.getAllCursors()
|
||||
@newSelections = @activeEditSession.getAllSelections()
|
||||
@updateDisplay(suppressAutoScroll: true)
|
||||
|
||||
Reference in New Issue
Block a user