From 9d3751052ab1c0feb591dbcac53807ce7445d03d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 22 Jan 2013 16:35:24 -0800 Subject: [PATCH] Support hitting tab in snippets with no tab stops Closes #149 --- src/packages/snippets/spec/snippets-spec.coffee | 7 +++++++ .../snippets/src/snippet-expansion.coffee | 15 +++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/packages/snippets/spec/snippets-spec.coffee b/src/packages/snippets/spec/snippets-spec.coffee index f03a86452..0445453c7 100644 --- a/src/packages/snippets/spec/snippets-spec.coffee +++ b/src/packages/snippets/spec/snippets-spec.coffee @@ -77,6 +77,13 @@ describe "Snippets extension", -> expect(buffer.lineForRow(0)).toBe "this is a testvar quicksort = function () {" expect(editor.getCursorScreenPosition()).toEqual [0, 14] + it "inserts a real tab the next time a tab is pressed after the snippet is expanded", -> + editor.insertText("t1") + editor.trigger keydownEvent('tab', target: editor[0]) + expect(buffer.lineForRow(0)).toBe "this is a testvar quicksort = function () {" + editor.trigger keydownEvent('tab', target: editor[0]) + expect(buffer.lineForRow(0)).toBe "this is a test var quicksort = function () {" + describe "when the snippet contains tab stops", -> it "places the cursor at the first tab-stop, and moves the cursor in response to 'next-tab-stop' events", -> anchorCountBefore = editor.activeEditSession.getAnchors().length diff --git a/src/packages/snippets/src/snippet-expansion.coffee b/src/packages/snippets/src/snippet-expansion.coffee index 74dcd5d6f..b1a62e496 100644 --- a/src/packages/snippets/src/snippet-expansion.coffee +++ b/src/packages/snippets/src/snippet-expansion.coffee @@ -12,12 +12,13 @@ class SnippetExpansion startPosition = @editSession.getCursorBufferPosition() @editSession.transact => @editSession.insertText(snippet.body, autoIndent: false) - editSession.pushOperation - do: => - @subscribe @editSession, 'cursor-moved.snippet-expansion', (e) => @cursorMoved(e) - @placeTabStopAnchorRanges(startPosition, snippet.tabStops) - @editSession.snippetExpansion = this - undo: => @destroy() + if snippet.tabStops.length > 0 + editSession.pushOperation + do: => + @subscribe @editSession, 'cursor-moved.snippet-expansion', (e) => @cursorMoved(e) + @placeTabStopAnchorRanges(startPosition, snippet.tabStops) + @editSession.snippetExpansion = this + undo: => @destroy() @indentSubsequentLines(startPosition.row, snippet) if snippet.lineCount > 1 cursorMoved: ({oldBufferPosition, newBufferPosition}) -> @@ -29,8 +30,6 @@ class SnippetExpansion @destroy() unless _.intersect(oldTabStops, newTabStops).length placeTabStopAnchorRanges: (startPosition, tabStopRanges) -> - return unless @snippet.tabStops.length > 0 - @tabStopAnchorRanges = tabStopRanges.map ({start, end}) => anchorRange = @editSession.addAnchorRange([startPosition.add(start), startPosition.add(end)]) @subscribe anchorRange, 'destroyed', =>