diff --git a/spec/editor-component-spec.coffee b/spec/editor-component-spec.coffee index 5048f1a6a..9841cfa44 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 36979f934..0a128fb41 100644 --- a/src/display-buffer.coffee +++ b/src/display-buffer.coffee @@ -520,7 +520,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/editor-component.coffee b/src/editor-component.coffee index 1a1b10859..2999c88b3 100644 --- a/src/editor-component.coffee +++ b/src/editor-component.coffee @@ -539,7 +539,7 @@ EditorComponent = React.createClass onDecorationChanged: -> @decorationChangedImmediate ?= setImmediate => - @requestUpdate() + @requestUpdate() if @isMounted() @decorationChangedImmediate = null selectToMousePositionUntilMouseUp: (event) -> 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()