diff --git a/spec/app/language-mode-spec.coffee b/spec/app/language-mode-spec.coffee index 340f4865c..dabd480d3 100644 --- a/spec/app/language-mode-spec.coffee +++ b/spec/app/language-mode-spec.coffee @@ -174,6 +174,15 @@ describe "LanguageMode", -> expect(buffer.lineForRow(0)).toBe "\"\"" expect(editSession.getCursorBufferPosition()).toEqual [0, 1] + describe "bracket deletion", -> + it "deletes the end bracket when it directly proceeds a begin bracket that is being backspaced", -> + buffer.setText("") + editSession.setCursorBufferPosition([0, 0]) + editSession.insertText '{' + expect(buffer.lineForRow(0)).toBe "{}" + editSession.backspace() + expect(buffer.lineForRow(0)).toBe "" + describe "javascript", -> beforeEach -> editSession = fixturesProject.buildEditSessionForPath('sample.js', autoIndent: false) diff --git a/src/app/language-mode.coffee b/src/app/language-mode.coffee index 66caed8da..4afbee747 100644 --- a/src/app/language-mode.coffee +++ b/src/app/language-mode.coffee @@ -47,6 +47,20 @@ class LanguageMode @bracketAnchorRanges.push @editSession.addAnchorRange(range) false + _.adviseBefore @editSession, 'backspace', => + return if @editSession.hasMultipleCursors() + return unless @editSession.getSelection().isEmpty() + + cursorBufferPosition = @editSession.getCursorBufferPosition() + previousCharacter = @editSession.getTextInBufferRange([cursorBufferPosition.add([0, -1]), cursorBufferPosition]) + nextCharacter = @editSession.getTextInBufferRange([cursorBufferPosition, cursorBufferPosition.add([0,1])]) + if @pairedCharacters[previousCharacter] is nextCharacter + @editSession.transact => + @editSession.moveCursorLeft() + @editSession.delete() + @editSession.delete() + false + reloadGrammar: -> path = @buffer.getPath() pathContents = @buffer.cachedDiskContents