From 17f12c42d33e4ba7af205c9d8f46913fa8be3743 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 23 Jan 2013 13:30:35 -0800 Subject: [PATCH] Delete end pair when begin pair is backspaced --- spec/app/language-mode-spec.coffee | 9 +++++++++ src/app/language-mode.coffee | 14 ++++++++++++++ 2 files changed, 23 insertions(+) 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