Autocomplete closes when when cursor position changes

This commit is contained in:
Corey Johnson & Nathan Sobo 2012-04-18 17:22:52 -07:00
parent 317b8ddf05
commit d768f1a50f
4 changed files with 25 additions and 4 deletions

View File

@ -161,6 +161,17 @@ describe "Autocomplete", ->
expect(autocomplete.find('li:eq(0)')).toHaveClass('selected')
expect(autocomplete.find('li:eq(1)')).not.toHaveClass('selected')
describe 'when the cursor is moved', ->
it "cancels the autocomplete", ->
editor.buffer.insert([10,0] ,"extra:s:extra")
editor.setCursorBufferPosition([10,7])
editor.trigger "autocomplete:toggle"
spyOn(autocomplete, "cancel").andCallThrough()
editor.moveCursorRight()
expect(autocomplete.cancel).toHaveBeenCalled()
expect(editor.lineForBufferRow(10)).toBe "extra:s:extra"
describe 'when changes are made to the buffer', ->
it 'updates word list', ->
spyOn(autocomplete, 'buildWordList')

View File

@ -16,6 +16,7 @@ class Autocomplete extends View
matches: null
currentMatchIndex: null
isAutocompleting: false
currentSelectionBufferRange: null
originalSelectionBufferRange: null
originalSelectedText: null
@ -40,9 +41,11 @@ class Autocomplete extends View
@buildWordList() unless @isAutocompleting
cancel: ->
@editor.getSelection().insertText @originalSelectedText
@editor.setSelectionBufferRange(@originalSelectionBufferRange)
@detach()
if @currentSelectionBufferRange
@editor.setSelectionBufferRange(@currentSelectionBufferRange)
@editor.getSelection().insertText @originalSelectedText
@editor.setSelectionBufferRange(@originalSelectionBufferRange)
toggle: ->
if @parent()[0] then @detach() else @attach()
@ -56,6 +59,9 @@ class Autocomplete extends View
@nextMatch()
false
@editor.on 'cursor-move.autocomplete', (e, data) =>
@cancel() unless @isAutocompleting
@editor.addClass('autocomplete')
@originalSelectedText = @editor.getSelectedText()
@originalSelectionBufferRange = @editor.getSelection().getBufferRange()
@ -120,6 +126,7 @@ class Autocomplete extends View
@isAutocompleting = true
@editor.insertText(match[1])
@editor.setSelectionBufferRange([startPosition, [startPosition.row, startPosition.column + match[1].length]])
@currentSelectionBufferRange = @editor.getSelection().getBufferRange()
@isAutocompleting = false
prefixAndSuffixOfSelection: (selection) ->

View File

@ -24,6 +24,7 @@ class Cursor extends View
handleBufferChange: (e) ->
@anchor.handleBufferChange(e)
@refreshScreenPosition()
@trigger 'cursor-move', bufferChange: true
remove: ->
@editor.compositeCursor.removeCursor(this)
@ -36,6 +37,7 @@ class Cursor extends View
setBufferPosition: (bufferPosition, options={}) ->
@anchor.setBufferPosition(bufferPosition, options)
@refreshScreenPosition()
@trigger 'cursor-move', bufferChange: false
@clearSelection()
getScreenPosition: ->
@ -44,12 +46,12 @@ class Cursor extends View
setScreenPosition: (position, options={}) ->
@anchor.setScreenPosition(position, options)
@refreshScreenPosition(position, options)
@trigger 'cursor-move', bufferChange: false
@clearSelection()
refreshScreenPosition: ->
@goalColumn = null
@updateAppearance()
@trigger 'cursor:position-changed'
@removeClass 'idle'
window.clearTimeout(@idleTimeout) if @idleTimeout
@ -167,3 +169,5 @@ class Cursor extends View
if this == _.last(@editor.getCursors())
@editor.scrollTo(pixelPosition)
@selection.updateAppearance()

View File

@ -16,7 +16,6 @@ class Selection extends View
initialize: ({@editor, @cursor}) ->
@regions = []
@cursor.on 'cursor:position-changed', => @updateAppearance()
handleBufferChange: (e) ->
return unless @anchor