From 52680bd63f218bcc653548e18e979f0f4af06003 Mon Sep 17 00:00:00 2001 From: Matt Colyer Date: Wed, 13 Nov 2013 17:18:43 -0800 Subject: [PATCH 1/3] Don't normalize indents on paste if there are preceding characters --- spec/edit-session-spec.coffee | 7 +++++++ src/cursor.coffee | 8 ++++++++ src/edit-session.coffee | 5 ++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/spec/edit-session-spec.coffee b/spec/edit-session-spec.coffee index cd2f50430..2107c3928 100644 --- a/spec/edit-session-spec.coffee +++ b/spec/edit-session-spec.coffee @@ -2525,6 +2525,13 @@ describe "EditSession", -> editSession.insertText("foo", indentBasis: 5) expect(editSession.lineForBufferRow(5)).toBe " foo current = items.shift();" + it "does not adjust the whitespace if there are preceding characters", -> + copyText(" foo") + editSession.setCursorBufferPosition([5, 30]) + editSession.pasteText() + + expect(editSession.lineForBufferRow(5)).toBe " current = items.shift(); foo" + describe "when the inserted text contains newlines", -> describe "when the cursor is preceded only by whitespace characters", -> it "normalizes indented lines to the cursor's current indentation level", -> diff --git a/src/cursor.coffee b/src/cursor.coffee index 4e7402015..300d3fd36 100644 --- a/src/cursor.coffee +++ b/src/cursor.coffee @@ -466,3 +466,11 @@ class Cursor # Returns an {Array} of {String}s. getScopes: -> @editSession.scopesForBufferPosition(@getBufferPosition()) + + # Public: Returns true if this cursor has no non-whitespace characters before + # it's current position. + hasNoPrecedingCharacters: -> + bufferPosition = @getBufferPosition() + line = @editSession.lineForBufferRow(bufferPosition.row) + firstCharacterColumn = line.search(/\S/) + noPrecedingCharacters = bufferPosition.column < firstCharacterColumn or firstCharacterColumn is -1 diff --git a/src/edit-session.coffee b/src/edit-session.coffee index a3bb2673c..a0afab1bf 100644 --- a/src/edit-session.coffee +++ b/src/edit-session.coffee @@ -567,8 +567,11 @@ class EditSession pasteText: (options={}) -> [text, metadata] = atom.pasteboard.read() + containsNewlines = text.indexOf('\n') isnt -1 + if atom.config.get('editor.normalizeIndentOnPaste') and metadata - options.indentBasis ?= metadata.indentBasis + if @getCursor().hasNoPrecedingCharacters() or containsNewlines + options.indentBasis ?= metadata.indentBasis @insertText(text, options) From 64f2cdb79598a100663654da3b800f6d26f8dab6 Mon Sep 17 00:00:00 2001 From: Matt Colyer Date: Wed, 13 Nov 2013 17:35:21 -0800 Subject: [PATCH 2/3] :lipstick: --- src/cursor.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cursor.coffee b/src/cursor.coffee index 300d3fd36..e32fdc9d8 100644 --- a/src/cursor.coffee +++ b/src/cursor.coffee @@ -468,7 +468,7 @@ class Cursor @editSession.scopesForBufferPosition(@getBufferPosition()) # Public: Returns true if this cursor has no non-whitespace characters before - # it's current position. + # its current position. hasNoPrecedingCharacters: -> bufferPosition = @getBufferPosition() line = @editSession.lineForBufferRow(bufferPosition.row) From b323d9ce18848398b4e03d7f1adcc5e54b7a1a9a Mon Sep 17 00:00:00 2001 From: Matt Colyer Date: Fri, 15 Nov 2013 15:32:24 -0800 Subject: [PATCH 3/3] Rename hasNoPrecedingCharacters => hasPrecedingCharactersOnLine --- src/cursor.coffee | 8 ++++++-- src/edit-session.coffee | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/cursor.coffee b/src/cursor.coffee index e32fdc9d8..551edef0e 100644 --- a/src/cursor.coffee +++ b/src/cursor.coffee @@ -469,8 +469,12 @@ class Cursor # Public: Returns true if this cursor has no non-whitespace characters before # its current position. - hasNoPrecedingCharacters: -> + hasPrecedingCharactersOnLine: -> bufferPosition = @getBufferPosition() line = @editSession.lineForBufferRow(bufferPosition.row) firstCharacterColumn = line.search(/\S/) - noPrecedingCharacters = bufferPosition.column < firstCharacterColumn or firstCharacterColumn is -1 + + if firstCharacterColumn is -1 + false + else + bufferPosition.column > firstCharacterColumn diff --git a/src/edit-session.coffee b/src/edit-session.coffee index a0afab1bf..5da3c3c63 100644 --- a/src/edit-session.coffee +++ b/src/edit-session.coffee @@ -570,7 +570,7 @@ class EditSession containsNewlines = text.indexOf('\n') isnt -1 if atom.config.get('editor.normalizeIndentOnPaste') and metadata - if @getCursor().hasNoPrecedingCharacters() or containsNewlines + if !@getCursor().hasPrecedingCharactersOnLine() or containsNewlines options.indentBasis ?= metadata.indentBasis @insertText(text, options)