From 704090647361515c7ad6eec63bd24665a2d9ea4d Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 11 Jun 2014 07:18:52 -0600 Subject: [PATCH 1/2] Ignore null bytes when measuring character widths in React editor Fixes #2391 --- spec/editor-component-spec.coffee | 5 +++++ src/display-buffer.coffee | 2 +- src/lines-component.coffee | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/spec/editor-component-spec.coffee b/spec/editor-component-spec.coffee index cf3e0a06e..6f3f6eb1f 100644 --- a/spec/editor-component-spec.coffee +++ b/spec/editor-component-spec.coffee @@ -227,6 +227,11 @@ describe "EditorComponent", -> else [node] + describe "when the buffer contains null bytes", -> + it "excludes the null byte from character measurement", -> + editor.setText("a\0b") + expect(editor.pixelPositionForScreenPosition([0, Infinity]).left).toEqual 2 * charWidth + describe "gutter rendering", -> [lineNumberHasClass, gutter] = [] diff --git a/src/display-buffer.coffee b/src/display-buffer.coffee index c8b3ed97c..3ef72d8e8 100644 --- a/src/display-buffer.coffee +++ b/src/display-buffer.coffee @@ -522,7 +522,7 @@ class DisplayBuffer extends Model charWidths = @getScopedCharWidths(token.scopes) for char in token.value return {top, left} if column is targetColumn - left += charWidths[char] ? defaultCharWidth + left += charWidths[char] ? defaultCharWidth unless char is '\0' column++ {top, left} diff --git a/src/lines-component.coffee b/src/lines-component.coffee index 110e11fdc..7abf75ddc 100644 --- a/src/lines-component.coffee +++ b/src/lines-component.coffee @@ -232,6 +232,8 @@ LinesComponent = React.createClass charWidths = editor.getScopedCharWidths(scopes) for char in value + continue if char is '\0' + unless charWidths[char]? unless textNode? rangeForMeasurement ?= document.createRange() From 5add0e4f703a51223019c71e73e9f255d2de716e Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 11 Jun 2014 07:21:05 -0600 Subject: [PATCH 2/2] Don't forceUpdate in setImmediate callback if editor is unmounted This was throwing errors in the EditorComponent spec. /cc @benogle, just so you're aware --- src/editor-component.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editor-component.coffee b/src/editor-component.coffee index 616105dec..b2801017c 100644 --- a/src/editor-component.coffee +++ b/src/editor-component.coffee @@ -533,7 +533,7 @@ EditorComponent = React.createClass onDecorationChanged: -> @decorationChangedImmediate ?= setImmediate => - @requestUpdate() + @requestUpdate() if @isMounted() @decorationChangedImmediate = null selectToMousePositionUntilMouseUp: (event) ->