mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 23:48:05 +03:00
Autocomplete closes when when cursor position changes
This commit is contained in:
parent
317b8ddf05
commit
d768f1a50f
@ -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')
|
||||
|
@ -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) ->
|
||||
|
@ -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()
|
||||
|
@ -16,7 +16,6 @@ class Selection extends View
|
||||
|
||||
initialize: ({@editor, @cursor}) ->
|
||||
@regions = []
|
||||
@cursor.on 'cursor:position-changed', => @updateAppearance()
|
||||
|
||||
handleBufferChange: (e) ->
|
||||
return unless @anchor
|
||||
|
Loading…
Reference in New Issue
Block a user